@aics/vole-app 2.11.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/LICENSE +33 -0
- package/LICENSE.txt +26 -0
- package/README.md +45 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-500.eot +0 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-500.js +2337 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-500.svg +604 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-500.ttf +0 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-500.woff +0 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-500.woff2 +0 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-700.eot +0 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-700.js +2336 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-700.svg +604 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-700.ttf +0 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-700.woff +0 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-700.woff2 +0 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-regular.eot +0 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-regular.js +2337 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-regular.svg +604 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-regular.ttf +0 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-regular.woff +0 -0
- package/es/aics-image-viewer/assets/fonts/open-sans/open-sans-regular.woff2 +0 -0
- package/es/aics-image-viewer/assets/icons/axes.js +20 -0
- package/es/aics-image-viewer/assets/icons/boundingBox.js +18 -0
- package/es/aics-image-viewer/assets/icons/camera.js +15 -0
- package/es/aics-image-viewer/assets/icons/channels.js +15 -0
- package/es/aics-image-viewer/assets/icons/closePanel.js +18 -0
- package/es/aics-image-viewer/assets/icons/download.js +17 -0
- package/es/aics-image-viewer/assets/icons/dropdownArrow.js +15 -0
- package/es/aics-image-viewer/assets/icons/index.js +24 -0
- package/es/aics-image-viewer/assets/icons/metadata.js +15 -0
- package/es/aics-image-viewer/assets/icons/preferences.js +15 -0
- package/es/aics-image-viewer/assets/icons/resetView.js +16 -0
- package/es/aics-image-viewer/assets/icons/svg.d.js +0 -0
- package/es/aics-image-viewer/assets/icons/turnTable.js +18 -0
- package/es/aics-image-viewer/assets/styles/animatedEllipsis.css +21 -0
- package/es/aics-image-viewer/assets/styles/globals.css +35 -0
- package/es/aics-image-viewer/assets/styles/noui-slider-override.css +1 -0
- package/es/aics-image-viewer/assets/styles/variables.css +1 -0
- package/es/aics-image-viewer/components/App/ChannelUpdater.js +96 -0
- package/es/aics-image-viewer/components/App/index.js +849 -0
- package/es/aics-image-viewer/components/App/styles.css +60 -0
- package/es/aics-image-viewer/components/App/types.js +1 -0
- package/es/aics-image-viewer/components/AxisClipSliders/index.js +285 -0
- package/es/aics-image-viewer/components/AxisClipSliders/styles.css +257 -0
- package/es/aics-image-viewer/components/BottomPanel/index.js +70 -0
- package/es/aics-image-viewer/components/BottomPanel/styles.css +85 -0
- package/es/aics-image-viewer/components/CellViewerCanvasWrapper/index.js +113 -0
- package/es/aics-image-viewer/components/CellViewerCanvasWrapper/styles.css +12 -0
- package/es/aics-image-viewer/components/ChannelsWidget.js +100 -0
- package/es/aics-image-viewer/components/ChannelsWidgetRow/index.js +158 -0
- package/es/aics-image-viewer/components/ChannelsWidgetRow/styles.css +38 -0
- package/es/aics-image-viewer/components/ColorPicker.js +120 -0
- package/es/aics-image-viewer/components/ControlPanel/index.js +180 -0
- package/es/aics-image-viewer/components/ControlPanel/styles.css +169 -0
- package/es/aics-image-viewer/components/CustomizeWidget.js +46 -0
- package/es/aics-image-viewer/components/ErrorAlert/index.js +144 -0
- package/es/aics-image-viewer/components/ErrorAlert/styles.css +22 -0
- package/es/aics-image-viewer/components/GlobalVolumeControls.js +38 -0
- package/es/aics-image-viewer/components/MetadataViewer/index.js +99 -0
- package/es/aics-image-viewer/components/MetadataViewer/styles.css +81 -0
- package/es/aics-image-viewer/components/StyleProvider/index.js +210 -0
- package/es/aics-image-viewer/components/TfEditor/index.js +584 -0
- package/es/aics-image-viewer/components/TfEditor/styles.css +88 -0
- package/es/aics-image-viewer/components/Toolbar/DownloadButton.js +55 -0
- package/es/aics-image-viewer/components/Toolbar/ViewModeRadioButtons.js +22 -0
- package/es/aics-image-viewer/components/Toolbar/index.js +274 -0
- package/es/aics-image-viewer/components/Toolbar/styles.css +241 -0
- package/es/aics-image-viewer/components/ViewerStateProvider/ResetStateProvider.js +160 -0
- package/es/aics-image-viewer/components/ViewerStateProvider/index.js +261 -0
- package/es/aics-image-viewer/components/ViewerStateProvider/types.js +1 -0
- package/es/aics-image-viewer/components/shared/NumericInput/index.js +147 -0
- package/es/aics-image-viewer/components/shared/NumericInput/styles.css +64 -0
- package/es/aics-image-viewer/components/shared/SharedCheckBox.js +17 -0
- package/es/aics-image-viewer/components/shared/SliderRow/index.js +31 -0
- package/es/aics-image-viewer/components/shared/SliderRow/styles.css +19 -0
- package/es/aics-image-viewer/components/shared/SmarterSlider.js +40 -0
- package/es/aics-image-viewer/components/shared/ViewerIcon.js +22 -0
- package/es/aics-image-viewer/shared/colorPalette.js +19 -0
- package/es/aics-image-viewer/shared/constants.js +164 -0
- package/es/aics-image-viewer/shared/enums.js +18 -0
- package/es/aics-image-viewer/shared/types.js +6 -0
- package/es/aics-image-viewer/shared/utils/colorRepresentations.js +16 -0
- package/es/aics-image-viewer/shared/utils/controlPointsToLut.js +182 -0
- package/es/aics-image-viewer/shared/utils/hooks.js +51 -0
- package/es/aics-image-viewer/shared/utils/httpClient.js +57 -0
- package/es/aics-image-viewer/shared/utils/playControls.js +97 -0
- package/es/aics-image-viewer/shared/utils/sceneStore.js +140 -0
- package/es/aics-image-viewer/shared/utils/sliderValuesToImageValues.js +36 -0
- package/es/aics-image-viewer/shared/utils/test/viewerChannelSettings.test.js +132 -0
- package/es/aics-image-viewer/shared/utils/utilsService.js +54 -0
- package/es/aics-image-viewer/shared/utils/viewerChannelSettings.js +152 -0
- package/es/aics-image-viewer/shared/utils/viewerState.js +69 -0
- package/es/aics-image-viewer/shared/utils/webgl-debug.js +1103 -0
- package/es/index.js +4 -0
- package/package.json +130 -0
- package/type-declarations/aics-image-viewer/assets/icons/index.d.ts +14 -0
- package/type-declarations/aics-image-viewer/components/App/ChannelUpdater.d.ts +16 -0
- package/type-declarations/aics-image-viewer/components/App/index.d.ts +6 -0
- package/type-declarations/aics-image-viewer/components/App/types.d.ts +45 -0
- package/type-declarations/aics-image-viewer/components/AxisClipSliders/index.d.ts +24 -0
- package/type-declarations/aics-image-viewer/components/BottomPanel/index.d.ts +11 -0
- package/type-declarations/aics-image-viewer/components/CellViewerCanvasWrapper/index.d.ts +33 -0
- package/type-declarations/aics-image-viewer/components/ChannelsWidget.d.ts +19 -0
- package/type-declarations/aics-image-viewer/components/ChannelsWidgetRow/index.d.ts +17 -0
- package/type-declarations/aics-image-viewer/components/ColorPicker.d.ts +13 -0
- package/type-declarations/aics-image-viewer/components/ControlPanel/index.d.ts +20 -0
- package/type-declarations/aics-image-viewer/components/CustomizeWidget.d.ts +15 -0
- package/type-declarations/aics-image-viewer/components/ErrorAlert/index.d.ts +12 -0
- package/type-declarations/aics-image-viewer/components/GlobalVolumeControls.d.ts +21 -0
- package/type-declarations/aics-image-viewer/components/MetadataViewer/index.d.ts +7 -0
- package/type-declarations/aics-image-viewer/components/StyleProvider/index.d.ts +5 -0
- package/type-declarations/aics-image-viewer/components/TfEditor/index.d.ts +19 -0
- package/type-declarations/aics-image-viewer/components/Toolbar/DownloadButton.d.ts +8 -0
- package/type-declarations/aics-image-viewer/components/Toolbar/ViewModeRadioButtons.d.ts +8 -0
- package/type-declarations/aics-image-viewer/components/Toolbar/index.d.ts +31 -0
- package/type-declarations/aics-image-viewer/components/ViewerStateProvider/ResetStateProvider.d.ts +34 -0
- package/type-declarations/aics-image-viewer/components/ViewerStateProvider/index.d.ts +33 -0
- package/type-declarations/aics-image-viewer/components/ViewerStateProvider/types.d.ts +105 -0
- package/type-declarations/aics-image-viewer/components/shared/NumericInput/index.d.ts +19 -0
- package/type-declarations/aics-image-viewer/components/shared/SharedCheckBox.d.ts +9 -0
- package/type-declarations/aics-image-viewer/components/shared/SliderRow/index.d.ts +17 -0
- package/type-declarations/aics-image-viewer/components/shared/SmarterSlider.d.ts +5 -0
- package/type-declarations/aics-image-viewer/components/shared/ViewerIcon.d.ts +9 -0
- package/type-declarations/aics-image-viewer/shared/constants.d.ts +40 -0
- package/type-declarations/aics-image-viewer/shared/enums.d.ts +15 -0
- package/type-declarations/aics-image-viewer/shared/types.d.ts +15 -0
- package/type-declarations/aics-image-viewer/shared/utils/colorRepresentations.d.ts +10 -0
- package/type-declarations/aics-image-viewer/shared/utils/controlPointsToLut.d.ts +53 -0
- package/type-declarations/aics-image-viewer/shared/utils/hooks.d.ts +14 -0
- package/type-declarations/aics-image-viewer/shared/utils/playControls.d.ts +27 -0
- package/type-declarations/aics-image-viewer/shared/utils/sceneStore.d.ts +17 -0
- package/type-declarations/aics-image-viewer/shared/utils/sliderValuesToImageValues.d.ts +10 -0
- package/type-declarations/aics-image-viewer/shared/utils/viewerChannelSettings.d.ts +46 -0
- package/type-declarations/aics-image-viewer/shared/utils/viewerState.d.ts +10 -0
- package/type-declarations/index.d.ts +7 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
.bottom-panel{
|
|
2
|
+
position:absolute;
|
|
3
|
+
bottom:0;
|
|
4
|
+
width:100%;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.bottom-panel .ant-drawer .ant-drawer-content-wrapper{
|
|
8
|
+
transform:translateY(calc(100% - 55px));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.bottom-panel .ant-drawer-content-wrapper{
|
|
12
|
+
display:flex;
|
|
13
|
+
flex-direction:column;
|
|
14
|
+
justify-content:flex-end;
|
|
15
|
+
transition:all 0.3s, max-width 0s 0s;
|
|
16
|
+
opacity:85%;
|
|
17
|
+
box-shadow:none;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.bottom-panel .ant-drawer-content{
|
|
21
|
+
background:none;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.bottom-panel .ant-drawer-header{
|
|
25
|
+
background:none;
|
|
26
|
+
padding:21px 24px;
|
|
27
|
+
border-bottom:none;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.bottom-panel .ant-drawer-body{
|
|
31
|
+
padding:16px 24px;
|
|
32
|
+
display:flex;
|
|
33
|
+
flex-direction:row;
|
|
34
|
+
align-items:center;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.bottom-panel.bottom-panel.bottom-panel .ant-drawer-title .ant-btn{
|
|
38
|
+
background-color:var(--color-controlpanel-drawer-bg);
|
|
39
|
+
color:#aeacae;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.bottom-panel.bottom-panel.bottom-panel .ant-drawer-title .ant-btn:active,
|
|
43
|
+
.bottom-panel.bottom-panel.bottom-panel .ant-drawer-title .ant-btn:hover,
|
|
44
|
+
.bottom-panel.bottom-panel.bottom-panel .ant-drawer-title .ant-btn:focus{
|
|
45
|
+
background-color:var(--color-controlpanel-drawer-bg);
|
|
46
|
+
color:white;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.bottom-panel .options-button{
|
|
50
|
+
border:none;
|
|
51
|
+
box-shadow:none;
|
|
52
|
+
margin-right:0.8em;
|
|
53
|
+
margin-bottom:0.2em;
|
|
54
|
+
position:absolute;
|
|
55
|
+
right:0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.bottom-panel .button-arrow{
|
|
59
|
+
transform:rotate(270deg);
|
|
60
|
+
transition:transform 0.2s linear !important;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.bottom-panel .drawer-body-wrapper{
|
|
64
|
+
display:none;
|
|
65
|
+
width:100%;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.bottom-panel .ant-drawer.ant-drawer-open .ant-drawer-content-wrapper{
|
|
69
|
+
transform:none;
|
|
70
|
+
box-shadow:none;
|
|
71
|
+
-webkit-box-shadow:none;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.bottom-panel .ant-drawer.ant-drawer-open .drawer-body-wrapper{
|
|
75
|
+
display:block;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.bottom-panel .ant-drawer.ant-drawer-open .ant-drawer-body,
|
|
79
|
+
.bottom-panel .ant-drawer.ant-drawer-open .ant-drawer-title .ant-btn.ant-btn-default{
|
|
80
|
+
background-color:var(--color-controlpanel-drawer-bg);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.bottom-panel .ant-drawer.ant-drawer-open .button-arrow{
|
|
84
|
+
transform:rotate(90deg);
|
|
85
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
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
|
+
import { LoadingOutlined } from "@ant-design/icons";
|
|
8
|
+
import React from "react";
|
|
9
|
+
import { CLIPPING_PANEL_HEIGHT_DEFAULT, CLIPPING_PANEL_HEIGHT_TALL } from "../../shared/constants";
|
|
10
|
+
import { ViewMode } from "../../shared/enums";
|
|
11
|
+
import AxisClipSliders from "../AxisClipSliders";
|
|
12
|
+
import BottomPanel from "../BottomPanel";
|
|
13
|
+
import { connectToViewerState } from "../ViewerStateProvider";
|
|
14
|
+
import "./styles.css";
|
|
15
|
+
var ViewerWrapper = function ViewerWrapper(props) {
|
|
16
|
+
var view3dviewerRef = /*#__PURE__*/React.createRef();
|
|
17
|
+
React.useEffect(function () {
|
|
18
|
+
view3dviewerRef.current.appendChild(props.view3d.getDOMElement());
|
|
19
|
+
props.view3d.setAutoRotate(props.autorotate);
|
|
20
|
+
}, []);
|
|
21
|
+
|
|
22
|
+
// TODO necessary?
|
|
23
|
+
React.useEffect(function () {
|
|
24
|
+
props.view3d.resize(null);
|
|
25
|
+
});
|
|
26
|
+
var renderOverlay = function renderOverlay() {
|
|
27
|
+
// Don't show spinner during playback - we may be constantly loading new data, it'll block the view!
|
|
28
|
+
var showSpinner = props.loadingImage && !props.playingAxis;
|
|
29
|
+
var spinner = showSpinner ? /*#__PURE__*/React.createElement("div", {
|
|
30
|
+
style: STYLES.noImage
|
|
31
|
+
}, /*#__PURE__*/React.createElement(LoadingOutlined, {
|
|
32
|
+
style: {
|
|
33
|
+
fontSize: 60,
|
|
34
|
+
zIndex: 1000
|
|
35
|
+
}
|
|
36
|
+
})) : null;
|
|
37
|
+
var noImageText = !props.loadingImage && !props.image ? /*#__PURE__*/React.createElement("div", {
|
|
38
|
+
style: STYLES.noImage
|
|
39
|
+
}, "No image selected") : null;
|
|
40
|
+
if (!!noImageText && props.view3d) {
|
|
41
|
+
props.view3d.removeAllVolumes();
|
|
42
|
+
}
|
|
43
|
+
return noImageText || spinner;
|
|
44
|
+
};
|
|
45
|
+
var appHeight = props.appHeight,
|
|
46
|
+
changeViewerSetting = props.changeViewerSetting,
|
|
47
|
+
visibleControls = props.visibleControls,
|
|
48
|
+
numTimesteps = props.numTimesteps,
|
|
49
|
+
numScenes = props.numScenes,
|
|
50
|
+
viewMode = props.viewMode,
|
|
51
|
+
region = props.region,
|
|
52
|
+
slice = props.slice,
|
|
53
|
+
time = props.time;
|
|
54
|
+
var clippingPanelTall = numTimesteps > 1 && numScenes > 1 && viewMode === ViewMode.threeD;
|
|
55
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
56
|
+
className: "cell-canvas",
|
|
57
|
+
style: _objectSpread(_objectSpread({}, STYLES.viewer), {}, {
|
|
58
|
+
height: appHeight
|
|
59
|
+
})
|
|
60
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
61
|
+
ref: view3dviewerRef,
|
|
62
|
+
style: STYLES.view3d
|
|
63
|
+
}), /*#__PURE__*/React.createElement(BottomPanel, {
|
|
64
|
+
title: "Clipping",
|
|
65
|
+
onVisibleChange: function onVisibleChange(visible) {
|
|
66
|
+
var _props$onClippingPane;
|
|
67
|
+
(_props$onClippingPane = props.onClippingPanelVisibleChange) === null || _props$onClippingPane === void 0 || _props$onClippingPane.call(props, visible, numTimesteps > 1, numScenes > 1, viewMode === ViewMode.threeD);
|
|
68
|
+
},
|
|
69
|
+
onVisibleChangeEnd: props.onClippingPanelVisibleChangeEnd,
|
|
70
|
+
height: clippingPanelTall ? CLIPPING_PANEL_HEIGHT_TALL : CLIPPING_PANEL_HEIGHT_DEFAULT
|
|
71
|
+
}, visibleControls.axisClipSliders && !!props.image && /*#__PURE__*/React.createElement(AxisClipSliders, {
|
|
72
|
+
mode: viewMode,
|
|
73
|
+
image: props.image,
|
|
74
|
+
changeViewerSetting: changeViewerSetting,
|
|
75
|
+
numSlices: props.numSlices,
|
|
76
|
+
numSlicesLoaded: props.numSlicesLoaded,
|
|
77
|
+
numScenes: numScenes,
|
|
78
|
+
region: region,
|
|
79
|
+
slices: slice,
|
|
80
|
+
numTimesteps: numTimesteps,
|
|
81
|
+
time: time,
|
|
82
|
+
scene: props.scene,
|
|
83
|
+
playControls: props.playControls,
|
|
84
|
+
playingAxis: props.playingAxis
|
|
85
|
+
})), renderOverlay());
|
|
86
|
+
};
|
|
87
|
+
export default connectToViewerState(ViewerWrapper, ["autorotate", "viewMode", "region", "slice", "time", "scene", "changeViewerSetting"]);
|
|
88
|
+
var STYLES = {
|
|
89
|
+
viewer: {
|
|
90
|
+
display: "flex",
|
|
91
|
+
position: "relative"
|
|
92
|
+
},
|
|
93
|
+
view3d: {
|
|
94
|
+
width: "100%",
|
|
95
|
+
display: "flex",
|
|
96
|
+
overflow: "hidden"
|
|
97
|
+
},
|
|
98
|
+
noImage: {
|
|
99
|
+
position: "absolute",
|
|
100
|
+
zIndex: 999,
|
|
101
|
+
top: 0,
|
|
102
|
+
left: 0,
|
|
103
|
+
bottom: 0,
|
|
104
|
+
right: 0,
|
|
105
|
+
display: "flex",
|
|
106
|
+
justifyContent: "center",
|
|
107
|
+
alignItems: "center",
|
|
108
|
+
backgroundColor: "#eeeee",
|
|
109
|
+
color: "#9b9b9b",
|
|
110
|
+
fontSize: "2em",
|
|
111
|
+
opacity: 0.75
|
|
112
|
+
}
|
|
113
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
3
|
+
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
|
+
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
|
+
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
|
+
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
|
+
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
|
+
import { Collapse, List } from "antd";
|
|
12
|
+
import React from "react";
|
|
13
|
+
import { getDisplayName } from "../shared/utils/viewerChannelSettings";
|
|
14
|
+
import ChannelsWidgetRow from "./ChannelsWidgetRow";
|
|
15
|
+
import SharedCheckBox from "./shared/SharedCheckBox";
|
|
16
|
+
import { connectToViewerState } from "./ViewerStateProvider";
|
|
17
|
+
var ChannelsWidget = function ChannelsWidget(props) {
|
|
18
|
+
var channelGroupedByType = props.channelGroupedByType,
|
|
19
|
+
channelSettings = props.channelSettings,
|
|
20
|
+
channelDataChannels = props.channelDataChannels,
|
|
21
|
+
filterFunc = props.filterFunc,
|
|
22
|
+
viewerChannelSettings = props.viewerChannelSettings;
|
|
23
|
+
var createCheckboxHandler = function createCheckboxHandler(key) {
|
|
24
|
+
return function (value, channelArray) {
|
|
25
|
+
props.changeChannelSetting(channelArray, _defineProperty({}, key, value));
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
var showVolumes = createCheckboxHandler("volumeEnabled");
|
|
29
|
+
var showSurfaces = createCheckboxHandler("isosurfaceEnabled");
|
|
30
|
+
var renderVisibilityControls = function renderVisibilityControls(channelArray) {
|
|
31
|
+
var volChecked = [];
|
|
32
|
+
var isoChecked = [];
|
|
33
|
+
channelArray.forEach(function (channelIndex) {
|
|
34
|
+
var channelSetting = channelSettings[channelIndex];
|
|
35
|
+
if (!channelSetting) return;
|
|
36
|
+
if (channelSetting.volumeEnabled) {
|
|
37
|
+
volChecked.push(channelIndex);
|
|
38
|
+
}
|
|
39
|
+
if (channelSetting.isosurfaceEnabled) {
|
|
40
|
+
isoChecked.push(channelIndex);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SharedCheckBox, {
|
|
44
|
+
allOptions: channelArray,
|
|
45
|
+
checkedList: volChecked,
|
|
46
|
+
onChange: showVolumes
|
|
47
|
+
}, "All Vol"), /*#__PURE__*/React.createElement(SharedCheckBox, {
|
|
48
|
+
allOptions: channelArray,
|
|
49
|
+
checkedList: isoChecked,
|
|
50
|
+
onChange: showSurfaces
|
|
51
|
+
// keep checkboxes lined up when channel rows have settings icon and headers don't
|
|
52
|
+
,
|
|
53
|
+
style: {
|
|
54
|
+
flex: 5
|
|
55
|
+
}
|
|
56
|
+
}, "All Surf"));
|
|
57
|
+
};
|
|
58
|
+
var renderChannelRow = function renderChannelRow(channelIndex) {
|
|
59
|
+
var thisChannelSettings = channelSettings[channelIndex];
|
|
60
|
+
return thisChannelSettings ? /*#__PURE__*/React.createElement(ChannelsWidgetRow, {
|
|
61
|
+
key: "".concat(channelIndex, "_").concat(thisChannelSettings.name, "_").concat(channelIndex),
|
|
62
|
+
index: channelIndex,
|
|
63
|
+
channelDataForChannel: channelDataChannels[channelIndex],
|
|
64
|
+
name: getDisplayName(thisChannelSettings.name, channelIndex, viewerChannelSettings),
|
|
65
|
+
channelState: thisChannelSettings,
|
|
66
|
+
changeChannelSetting: props.changeChannelSetting,
|
|
67
|
+
onColorChangeComplete: props.onColorChangeComplete,
|
|
68
|
+
saveIsosurface: props.saveIsosurface
|
|
69
|
+
}) : null;
|
|
70
|
+
};
|
|
71
|
+
var firstKey = Object.keys(channelGroupedByType)[0];
|
|
72
|
+
var rows = channelDataChannels && Object.entries(channelGroupedByType).filter(function (_ref) {
|
|
73
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
74
|
+
key = _ref2[0],
|
|
75
|
+
channelArray = _ref2[1];
|
|
76
|
+
return channelArray.length > 0 && (!filterFunc || filterFunc(key));
|
|
77
|
+
}).map(function (_ref3) {
|
|
78
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
79
|
+
key = _ref4[0],
|
|
80
|
+
channelArray = _ref4[1];
|
|
81
|
+
var children = /*#__PURE__*/React.createElement(List, {
|
|
82
|
+
itemLayout: "horizontal",
|
|
83
|
+
dataSource: channelArray,
|
|
84
|
+
renderItem: renderChannelRow
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
key: key,
|
|
88
|
+
label: key,
|
|
89
|
+
children: children,
|
|
90
|
+
extra: renderVisibilityControls(channelArray)
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
return /*#__PURE__*/React.createElement(Collapse, {
|
|
94
|
+
bordered: false,
|
|
95
|
+
defaultActiveKey: firstKey,
|
|
96
|
+
items: rows,
|
|
97
|
+
collapsible: "icon"
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
export default connectToViewerState(ChannelsWidget, ["channelSettings", "changeChannelSetting"]);
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
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."); }
|
|
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; } }
|
|
4
|
+
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; }
|
|
5
|
+
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; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
7
|
+
import { Button, Checkbox, List } from "antd";
|
|
8
|
+
import React, { useCallback, useState } from "react";
|
|
9
|
+
import { ISOSURFACE_OPACITY_SLIDER_MAX } from "../../shared/constants";
|
|
10
|
+
import { colorArrayToObject, colorObjectToArray } from "../../shared/utils/colorRepresentations";
|
|
11
|
+
import ColorPicker from "../ColorPicker";
|
|
12
|
+
import SliderRow from "../shared/SliderRow";
|
|
13
|
+
import ViewerIcon from "../shared/ViewerIcon";
|
|
14
|
+
import TfEditor from "../TfEditor";
|
|
15
|
+
import "./styles.css";
|
|
16
|
+
var ChannelsWidgetRow = function ChannelsWidgetRow(props) {
|
|
17
|
+
var index = props.index,
|
|
18
|
+
changeChannelSetting = props.changeChannelSetting,
|
|
19
|
+
saveIsosurface = props.saveIsosurface,
|
|
20
|
+
channelState = props.channelState;
|
|
21
|
+
var _useState = useState(false),
|
|
22
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
23
|
+
controlsOpen = _useState2[0],
|
|
24
|
+
setControlsOpen = _useState2[1];
|
|
25
|
+
var changeSettingForThisChannel = useCallback(function (value) {
|
|
26
|
+
return changeChannelSetting(index, value);
|
|
27
|
+
}, [changeChannelSetting, index]);
|
|
28
|
+
var volumeCheckHandler = function volumeCheckHandler(_ref) {
|
|
29
|
+
var target = _ref.target;
|
|
30
|
+
changeChannelSetting(index, {
|
|
31
|
+
volumeEnabled: target.checked
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var isosurfaceCheckHandler = function isosurfaceCheckHandler(_ref2) {
|
|
35
|
+
var target = _ref2.target;
|
|
36
|
+
changeChannelSetting(index, {
|
|
37
|
+
isosurfaceEnabled: target.checked
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
var onIsovalueChange = function onIsovalueChange(_ref3) {
|
|
41
|
+
var _ref4 = _slicedToArray(_ref3, 1),
|
|
42
|
+
newValue = _ref4[0];
|
|
43
|
+
return changeSettingForThisChannel({
|
|
44
|
+
isovalue: newValue
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
var onOpacityChange = function onOpacityChange(_ref5) {
|
|
48
|
+
var _ref6 = _slicedToArray(_ref5, 1),
|
|
49
|
+
newValue = _ref6[0];
|
|
50
|
+
return changeSettingForThisChannel({
|
|
51
|
+
opacity: newValue / ISOSURFACE_OPACITY_SLIDER_MAX
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
var onColorChange = function onColorChange(newRGB, _oldRGB, index) {
|
|
55
|
+
var color = colorObjectToArray(newRGB);
|
|
56
|
+
props.changeChannelSetting(index, {
|
|
57
|
+
color: color
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
var createColorPicker = function createColorPicker() {
|
|
61
|
+
return /*#__PURE__*/React.createElement(ColorPicker, {
|
|
62
|
+
color: colorArrayToObject(channelState.color),
|
|
63
|
+
onColorChange: onColorChange,
|
|
64
|
+
onColorChangeComplete: props.onColorChangeComplete,
|
|
65
|
+
disableAlpha: true,
|
|
66
|
+
idx: index,
|
|
67
|
+
width: 18
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
var visibilityControls = /*#__PURE__*/React.createElement("div", {
|
|
71
|
+
className: "channel-visibility-controls"
|
|
72
|
+
}, /*#__PURE__*/React.createElement(Checkbox, {
|
|
73
|
+
checked: channelState.volumeEnabled,
|
|
74
|
+
onChange: volumeCheckHandler
|
|
75
|
+
}, "Vol"), /*#__PURE__*/React.createElement(Checkbox, {
|
|
76
|
+
checked: channelState.isosurfaceEnabled,
|
|
77
|
+
onChange: isosurfaceCheckHandler
|
|
78
|
+
}, "Surf"), /*#__PURE__*/React.createElement(Button, {
|
|
79
|
+
icon: /*#__PURE__*/React.createElement(ViewerIcon, {
|
|
80
|
+
type: "preferences",
|
|
81
|
+
style: {
|
|
82
|
+
fontSize: "16px"
|
|
83
|
+
}
|
|
84
|
+
}),
|
|
85
|
+
onClick: function onClick() {
|
|
86
|
+
return setControlsOpen(!controlsOpen);
|
|
87
|
+
},
|
|
88
|
+
title: "Open channel settings",
|
|
89
|
+
type: "text"
|
|
90
|
+
}));
|
|
91
|
+
var createTFEditor = function createTFEditor() {
|
|
92
|
+
var controlPoints = channelState.controlPoints,
|
|
93
|
+
colorizeEnabled = channelState.colorizeEnabled,
|
|
94
|
+
colorizeAlpha = channelState.colorizeAlpha,
|
|
95
|
+
useControlPoints = channelState.useControlPoints,
|
|
96
|
+
ramp = channelState.ramp;
|
|
97
|
+
return /*#__PURE__*/React.createElement(TfEditor, {
|
|
98
|
+
id: "TFEditor" + index,
|
|
99
|
+
width: 418,
|
|
100
|
+
height: 145,
|
|
101
|
+
channelData: props.channelDataForChannel,
|
|
102
|
+
controlPoints: controlPoints,
|
|
103
|
+
changeChannelSetting: changeSettingForThisChannel,
|
|
104
|
+
colorizeEnabled: colorizeEnabled,
|
|
105
|
+
colorizeAlpha: colorizeAlpha,
|
|
106
|
+
useControlPoints: useControlPoints,
|
|
107
|
+
ramp: ramp
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
var renderSurfaceControls = function renderSurfaceControls() {
|
|
111
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(SliderRow, {
|
|
112
|
+
label: "Isovalue",
|
|
113
|
+
max: 255,
|
|
114
|
+
start: channelState.isovalue,
|
|
115
|
+
onChange: onIsovalueChange,
|
|
116
|
+
formatInteger: true
|
|
117
|
+
}), /*#__PURE__*/React.createElement(SliderRow, {
|
|
118
|
+
label: "Opacity",
|
|
119
|
+
max: ISOSURFACE_OPACITY_SLIDER_MAX,
|
|
120
|
+
start: channelState.opacity * ISOSURFACE_OPACITY_SLIDER_MAX,
|
|
121
|
+
onChange: onOpacityChange,
|
|
122
|
+
formatInteger: true
|
|
123
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
124
|
+
className: "button-row"
|
|
125
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
126
|
+
onClick: function onClick() {
|
|
127
|
+
return saveIsosurface(index, "GLTF");
|
|
128
|
+
}
|
|
129
|
+
}, "Export GLTF"), /*#__PURE__*/React.createElement(Button, {
|
|
130
|
+
onClick: function onClick() {
|
|
131
|
+
return saveIsosurface(index, "STL");
|
|
132
|
+
}
|
|
133
|
+
}, "Export STL")));
|
|
134
|
+
};
|
|
135
|
+
var renderControls = function renderControls() {
|
|
136
|
+
if (!channelState.volumeEnabled && !channelState.isosurfaceEnabled) {
|
|
137
|
+
return /*#__PURE__*/React.createElement("h4", {
|
|
138
|
+
style: {
|
|
139
|
+
fontStyle: "italic"
|
|
140
|
+
}
|
|
141
|
+
}, "Not currently visible");
|
|
142
|
+
}
|
|
143
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, channelState.volumeEnabled && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h4", null, "Volume settings:"), createTFEditor()), channelState.isosurfaceEnabled && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h4", null, "Surface settings:"), renderSurfaceControls()));
|
|
144
|
+
};
|
|
145
|
+
var rowClass = controlsOpen ? "channel-row" : "channel-row controls-closed";
|
|
146
|
+
return /*#__PURE__*/React.createElement(List.Item, {
|
|
147
|
+
key: index,
|
|
148
|
+
className: rowClass
|
|
149
|
+
}, /*#__PURE__*/React.createElement(List.Item.Meta, {
|
|
150
|
+
title: props.name,
|
|
151
|
+
avatar: createColorPicker()
|
|
152
|
+
}), visibilityControls, controlsOpen && /*#__PURE__*/React.createElement("div", {
|
|
153
|
+
style: {
|
|
154
|
+
width: "100%"
|
|
155
|
+
}
|
|
156
|
+
}, renderControls()));
|
|
157
|
+
};
|
|
158
|
+
export default ChannelsWidgetRow;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
.channel-rows-list .ant-list-item.channel-row{
|
|
2
|
+
padding:22px 0;
|
|
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{
|
|
9
|
+
color:var(--color-controlpanel-text);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.channel-rows-list .ant-list-item.channel-row h4{
|
|
13
|
+
color:var(--color-text-section);
|
|
14
|
+
margin-top:28px;
|
|
15
|
+
margin-bottom:10px;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.channel-rows-list .ant-list-item.channel-row .ant-btn-text{
|
|
19
|
+
color:var(--color-button-icon-activated-text);
|
|
20
|
+
transition:color 0.3s;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.channel-rows-list .ant-list-item.channel-row .ant-btn-text:hover,
|
|
24
|
+
.channel-rows-list .ant-list-item.channel-row .ant-btn-text:focus-visible{
|
|
25
|
+
color:var(--color-button-tertiary-hover-text) !important;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.channel-rows-list .ant-list-item.channel-row .button-row{
|
|
29
|
+
margin-top:16px;
|
|
30
|
+
display:flex;
|
|
31
|
+
justify-content:start;
|
|
32
|
+
align-items:end;
|
|
33
|
+
gap:6px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.channel-rows-list .ant-list-item.channel-row.controls-closed .ant-btn-text:not(:focus-visible){
|
|
37
|
+
color:var(--color-controlpanel-text);
|
|
38
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
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
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
8
|
+
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
|
+
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; } }
|
|
10
|
+
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; }
|
|
11
|
+
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; } }
|
|
12
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
13
|
+
import React from "react";
|
|
14
|
+
import { SketchPicker } from "react-color";
|
|
15
|
+
import { map } from "lodash";
|
|
16
|
+
// if there are fewer than this many screen pixels below the swatch but more above, open above the swatch
|
|
17
|
+
var OPEN_ABOVE_MARGIN = 310;
|
|
18
|
+
var DEFAULT_COLOR = {
|
|
19
|
+
r: "241",
|
|
20
|
+
g: "112",
|
|
21
|
+
b: "19",
|
|
22
|
+
a: "1"
|
|
23
|
+
};
|
|
24
|
+
var ColorPicker = function ColorPicker(props) {
|
|
25
|
+
var _React$useState = React.useState(false),
|
|
26
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
27
|
+
isOpen = _React$useState2[0],
|
|
28
|
+
setIsOpen = _React$useState2[1];
|
|
29
|
+
var _React$useState3 = React.useState(false),
|
|
30
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
31
|
+
openAboveSwatch = _React$useState4[0],
|
|
32
|
+
setOpenAboveSwatch = _React$useState4[1];
|
|
33
|
+
var _React$useState5 = React.useState(props.color || DEFAULT_COLOR),
|
|
34
|
+
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
35
|
+
currentColor = _React$useState6[0],
|
|
36
|
+
setCurrentColor = _React$useState6[1];
|
|
37
|
+
var swatchRef = React.useRef(null);
|
|
38
|
+
var handleClick = function handleClick() {
|
|
39
|
+
var swatchRect = swatchRef.current.getBoundingClientRect();
|
|
40
|
+
var noRoomBelowSwatch = swatchRect.bottom > window.innerHeight - OPEN_ABOVE_MARGIN;
|
|
41
|
+
setIsOpen(!isOpen);
|
|
42
|
+
setOpenAboveSwatch(noRoomBelowSwatch && swatchRect.top > OPEN_ABOVE_MARGIN);
|
|
43
|
+
};
|
|
44
|
+
var handleClose = function handleClose() {
|
|
45
|
+
return setIsOpen(false);
|
|
46
|
+
};
|
|
47
|
+
var handleChange = function handleChange(color) {
|
|
48
|
+
var _props$onColorChange;
|
|
49
|
+
setCurrentColor(color.rgb);
|
|
50
|
+
// supply onColorChange callback in props.
|
|
51
|
+
(_props$onColorChange = props.onColorChange) === null || _props$onColorChange === void 0 || _props$onColorChange.call(props, color.rgb, currentColor, props.idx);
|
|
52
|
+
};
|
|
53
|
+
var handleChangeComplete = function handleChangeComplete(color) {
|
|
54
|
+
var _props$onColorChangeC;
|
|
55
|
+
setCurrentColor(color.rgb);
|
|
56
|
+
// supply onColorChange callback in props.
|
|
57
|
+
(_props$onColorChangeC = props.onColorChangeComplete) === null || _props$onColorChangeC === void 0 || _props$onColorChangeC.call(props, color.rgb, currentColor, props.idx);
|
|
58
|
+
};
|
|
59
|
+
React.useEffect(function () {
|
|
60
|
+
return setCurrentColor(props.color);
|
|
61
|
+
}, [props.color]);
|
|
62
|
+
var width = props.width || 36;
|
|
63
|
+
var popoverDirectionStyle = openAboveSwatch ? {
|
|
64
|
+
bottom: "21px"
|
|
65
|
+
} : {
|
|
66
|
+
top: "0px"
|
|
67
|
+
};
|
|
68
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
|
69
|
+
style: STYLES.swatch,
|
|
70
|
+
ref: swatchRef,
|
|
71
|
+
onClick: handleClick
|
|
72
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
73
|
+
style: _objectSpread(_objectSpread({}, STYLES.color), {}, {
|
|
74
|
+
width: "".concat(width, "px"),
|
|
75
|
+
background: "rgba(".concat(map(currentColor, function (ele) {
|
|
76
|
+
return ele;
|
|
77
|
+
}), ")")
|
|
78
|
+
})
|
|
79
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
80
|
+
style: {
|
|
81
|
+
position: "absolute"
|
|
82
|
+
}
|
|
83
|
+
}, isOpen ? /*#__PURE__*/React.createElement("div", {
|
|
84
|
+
style: _objectSpread(_objectSpread({}, STYLES.popover), popoverDirectionStyle)
|
|
85
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
86
|
+
style: STYLES.cover,
|
|
87
|
+
onClick: handleClose
|
|
88
|
+
}), /*#__PURE__*/React.createElement(SketchPicker, {
|
|
89
|
+
color: currentColor,
|
|
90
|
+
onChange: handleChange,
|
|
91
|
+
onChangeComplete: handleChangeComplete,
|
|
92
|
+
disableAlpha: props.disableAlpha
|
|
93
|
+
})) : null));
|
|
94
|
+
};
|
|
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
|
+
};
|