@teselagen/ove 0.3.12 → 0.3.14

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teselagen/ove",
3
- "version": "0.3.12",
3
+ "version": "0.3.14",
4
4
  "main": "./src/index.js",
5
5
  "exports": {
6
6
  ".": {
@@ -15,7 +15,7 @@
15
15
  "dependencies": {
16
16
  "@teselagen/sequence-utils": "0.3.7",
17
17
  "@teselagen/range-utils": "0.3.7",
18
- "@teselagen/ui": "0.3.10",
18
+ "@teselagen/ui": "0.3.12",
19
19
  "@teselagen/file-utils": "0.3.9",
20
20
  "@teselagen/bounce-loader": "0.3.7",
21
21
  "@teselagen/bio-parsers": "0.3.8",
@@ -902,7 +902,7 @@ export class Editor extends React.Component {
902
902
  contentLeft={this.props.contentLeft}
903
903
  editorName={editorName}
904
904
  withDigestTool
905
- onChangeEditLock={this.props.onChangeEditLock}
905
+ beforeReadOnlyChange={this.props.beforeReadOnlyChange}
906
906
  {...ToolBarProps}
907
907
  />
908
908
 
@@ -1,5 +1,5 @@
1
1
  export const userDefinedHandlersAndOpts = [
2
- "onChangeEditLock",
2
+ "beforeReadOnlyChange",
3
3
  "defaultLinkedOligoMessage",
4
4
  "allowMultipleFeatureDirections",
5
5
  "getAdditionalEditAnnotationComps",
@@ -14,41 +14,35 @@ import { getSelectionMessage } from "../utils/editorUtils";
14
14
  import useMeltingTemp from "../utils/useMeltingTemp";
15
15
  import MeltingTemp from "./MeltingTemp";
16
16
  import { getSequenceWithinRange } from "@teselagen/range-utils";
17
+ import { handleReadOnlyChange } from "../ToolBar/editTool";
17
18
 
18
19
  const EditReadOnlyItem = connectToEditor(({ readOnly }) => ({
19
20
  readOnly
20
- }))(
21
- ({
22
- onSave,
23
- readOnly,
24
- showReadOnly,
25
- disableSetReadOnly,
26
- updateReadOnlyMode
27
- }) => {
28
- return showReadOnly ? (
29
- <StatusBarItem dataTest="veStatusBar-readOnly">
30
- {onSave ? (
31
- <HTMLSelect
32
- options={[
33
- { label: "Read Only", value: "readOnly" },
34
- { label: "Editable", value: "editable" }
35
- ]}
36
- disabled={disableSetReadOnly || !onSave} //the !onSave here is redundant
37
- className={Classes.MINIMAL}
38
- value={readOnly ? "readOnly" : "editable"}
39
- onChange={({ target: { value } }) => {
40
- updateReadOnlyMode(value === "readOnly");
41
- }}
42
- />
43
- ) : readOnly ? (
44
- "Read Only"
45
- ) : (
46
- "Editable"
47
- )}
48
- </StatusBarItem>
49
- ) : null;
50
- }
51
- );
21
+ }))(props => {
22
+ const { onSave, readOnly, showReadOnly, disableSetReadOnly } = props;
23
+ return showReadOnly ? (
24
+ <StatusBarItem dataTest="veStatusBar-readOnly">
25
+ {onSave ? (
26
+ <HTMLSelect
27
+ options={[
28
+ { label: "Read Only", value: "readOnly" },
29
+ { label: "Editable", value: "editable" }
30
+ ]}
31
+ disabled={disableSetReadOnly || !onSave} //the !onSave here is redundant
32
+ className={Classes.MINIMAL}
33
+ value={readOnly ? "readOnly" : "editable"}
34
+ onChange={({ target: { value } }) =>
35
+ handleReadOnlyChange(value === "readOnly", props)
36
+ }
37
+ />
38
+ ) : readOnly ? (
39
+ "Read Only"
40
+ ) : (
41
+ "Editable"
42
+ )}
43
+ </StatusBarItem>
44
+ ) : null;
45
+ });
52
46
 
53
47
  const ShowSelectionItem = compose(
54
48
  connectToEditor(
@@ -226,7 +220,8 @@ export function StatusBar({
226
220
  showGCContentByDefault,
227
221
  onSelectionOrCaretChanged,
228
222
  GCDecimalDigits = 1,
229
- isProtein
223
+ isProtein,
224
+ beforeReadOnlyChange
230
225
  }) {
231
226
  return (
232
227
  <div className="veStatusBar">
@@ -234,6 +229,7 @@ export function StatusBar({
234
229
  <ShowTypeItem editorName={editorName}></ShowTypeItem>
235
230
  )}
236
231
  <EditReadOnlyItem
232
+ beforeReadOnlyChange={beforeReadOnlyChange}
237
233
  editorName={editorName}
238
234
  onSave={onSave}
239
235
  disableSetReadOnly={disableSetReadOnly}
@@ -7,40 +7,43 @@ export default connectToEditor(editorState => {
7
7
  return {
8
8
  readOnly: editorState.readOnly
9
9
  };
10
- })(
11
- ({
12
- toolbarItemProps,
13
- readOnly,
14
- toggleReadOnlyMode,
15
- disableSetReadOnly,
16
- onChangeEditLock
17
- }) => {
18
- const [isLoading, setIsLoading] = useState(false);
19
- const readOnlyTooltip = ({ readOnly, disableSetReadOnly }) => {
20
- if (isLoading) {
21
- return "Loading...";
22
- } else if (disableSetReadOnly) {
23
- return "You do not have permission to edit locks on this sequence";
24
- }
25
- return readOnly ? "Click to enable editing" : "Click to disable editing";
26
- };
27
- return (
28
- <ToolbarItem
29
- {...{
30
- disabled: isLoading || disableSetReadOnly,
31
- Icon: <Icon icon={readOnly ? "lock" : "unlock"} />,
32
- onIconClick: async () => {
33
- if (onChangeEditLock) {
34
- setIsLoading(true);
35
- await onChangeEditLock(!readOnly);
36
- setIsLoading(false);
37
- }
38
- toggleReadOnlyMode();
39
- },
40
- tooltip: readOnlyTooltip({ readOnly, disableSetReadOnly }),
41
- ...toolbarItemProps
42
- }}
43
- />
44
- );
10
+ })(props => {
11
+ const { toolbarItemProps, readOnly, disableSetReadOnly } = props;
12
+ const [isLoading, setIsLoading] = useState(false);
13
+ const readOnlyTooltip = ({ readOnly, disableSetReadOnly }) => {
14
+ if (isLoading) {
15
+ return "Loading...";
16
+ } else if (disableSetReadOnly) {
17
+ return "You do not have permission to edit locks on this sequence";
18
+ }
19
+ return readOnly ? "Click to enable editing" : "Click to disable editing";
20
+ };
21
+ return (
22
+ <ToolbarItem
23
+ {...{
24
+ disabled: isLoading || disableSetReadOnly,
25
+ Icon: <Icon icon={readOnly ? "lock" : "unlock"} />,
26
+ onIconClick: () =>
27
+ handleReadOnlyChange(!readOnly, { ...props, setIsLoading }),
28
+ tooltip: readOnlyTooltip({ readOnly, disableSetReadOnly }),
29
+ ...toolbarItemProps
30
+ }}
31
+ />
32
+ );
33
+ });
34
+
35
+ export async function handleReadOnlyChange(
36
+ newVal,
37
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
38
+ { beforeReadOnlyChange, updateReadOnlyMode, setIsLoading = () => {} }
39
+ ) {
40
+ if (beforeReadOnlyChange) {
41
+ setIsLoading(true);
42
+ const shouldChange = await beforeReadOnlyChange(newVal);
43
+ setIsLoading(false);
44
+ if (shouldChange === false) {
45
+ return;
46
+ }
45
47
  }
46
- );
48
+ updateReadOnlyMode(newVal);
49
+ }
@@ -36,6 +36,7 @@ import {
36
36
  showDialog
37
37
  } from "../GlobalDialogUtils";
38
38
  import { partsSubmenu } from "../MenuBar/viewSubmenu";
39
+ import { handleReadOnlyChange } from "../ToolBar/editTool";
39
40
 
40
41
  const isProtein = props => props.sequenceData && props.sequenceData.isProtein;
41
42
  const isOligo = props => props.sequenceData && props.sequenceData.isOligo;
@@ -139,7 +140,7 @@ const fileCommandDefs = {
139
140
  isDisabled: props => props.disableSetReadOnly || !props.onSave,
140
141
  isHidden: props => !props.toggleReadOnlyMode,
141
142
  isActive: props => props.readOnly,
142
- handler: props => props.toggleReadOnlyMode()
143
+ handler: props => handleReadOnlyChange(!props.readOnly, props)
143
144
  },
144
145
 
145
146
  importSequence: {
@@ -39,7 +39,7 @@ import { store, view } from "@risingstack/react-easy-state";
39
39
 
40
40
  import withEditorProps from "../../withEditorProps";
41
41
  import { withProps } from "recompose";
42
- import { map, flatMap } from "lodash";
42
+ import { map, flatMap, round } from "lodash";
43
43
  import "./style.css";
44
44
 
45
45
  class AddOrEditAnnotationDialog extends React.Component {
@@ -58,30 +58,30 @@ class AddOrEditAnnotationDialog extends React.Component {
58
58
  formatStart = val => {
59
59
  const { isProtein } = this.props.sequenceData || {};
60
60
  if (isProtein) {
61
- return (val + 2) / 3;
61
+ return round((val + 2) / 3);
62
62
  }
63
- return val;
63
+ return round(val);
64
64
  };
65
65
  formatEnd = val => {
66
66
  const { isProtein } = this.props.sequenceData || {};
67
67
  if (isProtein) {
68
- return val / 3;
68
+ return round(val / 3);
69
69
  }
70
- return val;
70
+ return round(val);
71
71
  };
72
72
  parseStart = val => {
73
73
  const { isProtein } = this.props.sequenceData || {};
74
74
  if (isProtein) {
75
- return val * 3 - 2;
75
+ return round(val * 3 - 2);
76
76
  }
77
- return val;
77
+ return round(val);
78
78
  };
79
79
  parseEnd = val => {
80
80
  const { isProtein } = this.props.sequenceData || {};
81
81
  if (isProtein) {
82
- return val * 3;
82
+ return round(val * 3);
83
83
  }
84
- return val;
84
+ return round(val);
85
85
  };
86
86
  renderLocations = props => {
87
87
  const { fields } = props;
@@ -3,6 +3,7 @@ import { InputField, BPSelect, TextareaField } from "@teselagen/ui";
3
3
  import { reduxForm } from "redux-form";
4
4
  import withEditorProps from "../../withEditorProps";
5
5
  import { compose } from "recompose";
6
+ import { handleReadOnlyChange } from "../../ToolBar/editTool";
6
7
 
7
8
  class GeneralProperties extends React.Component {
8
9
  updateSeqDesc = val => {
@@ -17,7 +18,6 @@ class GeneralProperties extends React.Component {
17
18
  disableSetReadOnly,
18
19
  updateAvailability,
19
20
  sequenceData,
20
- updateReadOnlyMode,
21
21
  onSave,
22
22
  showAvailability,
23
23
  sequenceNameUpdate
@@ -102,10 +102,11 @@ class GeneralProperties extends React.Component {
102
102
  <div className="ve-column-right">
103
103
  {" "}
104
104
  <BPSelect
105
+ className={"veReadOnlySelect"}
105
106
  disabled={!onSave || disableSetReadOnly}
106
- onChange={val => {
107
- updateReadOnlyMode(val === "readOnly");
108
- }}
107
+ onChange={val =>
108
+ handleReadOnlyChange(val === "readOnly", this.props)
109
+ }
109
110
  value={readOnly ? "readOnly" : "editable"}
110
111
  options={[
111
112
  { label: "Read Only", value: "readOnly" },
@@ -568,10 +568,10 @@ function mapStateToProps(state, ownProps) {
568
568
  const { __allEditorsOptions } = VectorEditor;
569
569
  const { uppercaseSequenceMapFont } = __allEditorsOptions;
570
570
 
571
-
572
571
  if (!editorState) {
573
572
  return editorReducer({}, {});
574
573
  }
574
+ const sequenceLength = s.sequenceLengthSelector(editorState);
575
575
 
576
576
  const { findTool, annotationsToSupport = {} } = editorState;
577
577
  const visibilities = getVisibilities(editorState);
@@ -583,7 +583,13 @@ function mapStateToProps(state, ownProps) {
583
583
  ].forEach(([n, type, annotationTypePlural]) => {
584
584
  const vals = getFormValues(n)(state);
585
585
  if (vals) {
586
- annotationToAdd = getAnnToAdd(vals, n, type, annotationTypePlural);
586
+ annotationToAdd = getAnnToAdd(
587
+ vals,
588
+ n,
589
+ type,
590
+ annotationTypePlural,
591
+ sequenceLength
592
+ );
587
593
  }
588
594
  });
589
595
 
@@ -614,7 +620,6 @@ function mapStateToProps(state, ownProps) {
614
620
  editorState,
615
621
  ownProps.additionalEnzymes
616
622
  );
617
- const sequenceLength = s.sequenceLengthSelector(editorState);
618
623
 
619
624
  const { matchedSearchLayer, searchLayers, matchesTotal } =
620
625
  getSearchLayersAndMatch(editorState);
@@ -956,22 +961,28 @@ const getFindTool = createSelector(
956
961
  }
957
962
  );
958
963
 
959
- const getAnnToAdd = defaultMemoize((vals, n, type, annotationTypePlural) => {
960
- const annToAdd = {
961
- color: getFeatureToColorMap({ includeHidden: true })[
962
- vals.type || "primer_bind"
963
- ], //we won't have the correct color yet so we set it here
964
- ...vals,
965
- formName: n,
966
- type,
967
- annotationTypePlural,
968
- name: vals.name || "Untitled"
969
- };
970
- if (!vals.useLinkedOligo) {
971
- delete annToAdd.bases;
964
+ const getAnnToAdd = defaultMemoize(
965
+ (vals, n, type, annotationTypePlural, sequenceLength) => {
966
+ const annToAdd = normalizeRange(
967
+ {
968
+ color: getFeatureToColorMap({ includeHidden: true })[
969
+ vals.type || "primer_bind"
970
+ ], //we won't have the correct color yet so we set it here
971
+ ...vals,
972
+ formName: n,
973
+ type,
974
+ annotationTypePlural,
975
+ name: vals.name || "Untitled"
976
+ },
977
+ sequenceLength
978
+ );
979
+
980
+ if (!vals.useLinkedOligo) {
981
+ delete annToAdd.bases;
982
+ }
983
+ return annToAdd;
972
984
  }
973
- return annToAdd;
974
- });
985
+ );
975
986
  const getSeqDataWithAnnToAdd = defaultMemoize(
976
987
  (seqData, ann, allowMultipleFeatureDirections) => {
977
988
  if (ann) {
package/style.css CHANGED
@@ -10757,6 +10757,144 @@ li.bp3-menu-divider:last-child {
10757
10757
  .bp3-dark .isBoldSeq {
10758
10758
  stroke: white;
10759
10759
  }
10760
+ .Popover-body {
10761
+ display: inline-flex;
10762
+ flex-direction: column;
10763
+ padding: 10px;
10764
+ background: white;
10765
+ color: black;
10766
+ box-shadow: 0px 1px 9px rgba(0, 0, 0, 0.5);
10767
+ z-index: 1;
10768
+ margin-top: 10px;
10769
+ }
10770
+
10771
+ .Popover-tipShape {
10772
+ fill: white;
10773
+ }
10774
+
10775
+ .Popover-tip {
10776
+ display: none;
10777
+ }
10778
+
10779
+ .veToolbar .veToolbarItemOuter {
10780
+ display: flex;
10781
+ height: 32px;
10782
+ }
10783
+ .veToolbar .veToolbarItemOuter .veToolbarItem {
10784
+ display: flex;
10785
+ align-items: center;
10786
+ height: 32px;
10787
+ }
10788
+ .veToolbarSpacer {
10789
+ height: 80%;
10790
+ width: 1px;
10791
+ margin-left: 10px;
10792
+ margin-right: 10px;
10793
+ }
10794
+ .veToolbar .veToolbarItemOuter .veToolbarIcon {
10795
+ padding: 3px;
10796
+ border-radius: 3px;
10797
+ height: 32px;
10798
+ width: 30px;
10799
+ display: flex;
10800
+ align-items: center;
10801
+ justify-content: center;
10802
+ color: #006cab;
10803
+ }
10804
+ .veToolbarItemOuter.disabled .veToolbarIcon {
10805
+ color: #c0c0c0;
10806
+ }
10807
+ .veToolbar .veToolbarItemOuter .veToolbarIcon.veToolbarItemToggled {
10808
+ background: lightgrey;
10809
+ border-color: #006cab;
10810
+ }
10811
+
10812
+ .veToolbar :not(.disabled).veToolbarItemOuter .veToolbarIcon:hover {
10813
+ border-color: #006cab;
10814
+ }
10815
+ .veToolbar .veToolbarItemOuter .veToolbarIcon:active {
10816
+ opacity: 0.7;
10817
+ }
10818
+ .veToolbar .veToolbarItemOuter .veToolbarIcon img,
10819
+ .veToolbar .veToolbarItemOuter .veToolbarIcon svg,
10820
+ .veToolbar .veToolbarItemOuter .veToolbarIcon object {
10821
+ cursor: pointer;
10822
+ }
10823
+ .veToolbar .veToolbarItemOuter .veToolbarIcon img svg,
10824
+ .veToolbar .veToolbarItemOuter .veToolbarIcon svg svg,
10825
+ .veToolbar .veToolbarItemOuter .veToolbarIcon object svg {
10826
+ color: #006baa;
10827
+ }
10828
+
10829
+ .minOrfSizeInput::-webkit-inner-spin-button,
10830
+ .minOrfSizeInput::-webkit-outer-spin-button {
10831
+ -webkit-appearance: none;
10832
+ margin: 0;
10833
+ }
10834
+
10835
+ .minOrfSizeInput {
10836
+ padding-bottom: 0.25em;
10837
+ width: 5em;
10838
+ margin-left: 10px;
10839
+ text-align: center;
10840
+ padding-top: 0.25em;
10841
+ border: 1px solid lightgrey;
10842
+ justify-content: center;
10843
+ display: flex;
10844
+ flex-direction: column;
10845
+ }
10846
+
10847
+ .veToolbarDropdown {
10848
+ cursor: pointer;
10849
+ padding: 0px;
10850
+ padding-bottom: 5px;
10851
+ padding-top: 5px;
10852
+ border-radius: 3px;
10853
+ }
10854
+ .veToolbarDropdown:hover {
10855
+ background: lightgrey;
10856
+ }
10857
+ .veToolbarDropdown.isOpen {
10858
+ background: lightgrey;
10859
+ }
10860
+
10861
+ .veToolbarCutsiteFilterHolder {
10862
+ min-width: 300px;
10863
+ }
10864
+ .veToolbarCutsiteFilterHolder > div {
10865
+ margin: 10px;
10866
+ }
10867
+ .veToolbarCutsiteFilterHolder .title {
10868
+ margin: 10px;
10869
+ background: blue;
10870
+ width: 100%;
10871
+ }
10872
+
10873
+ .translateInfoSpan {
10874
+ font-size: 0.8em;
10875
+ padding: 4px;
10876
+ }
10877
+
10878
+ .showOrfTranslateSpan {
10879
+ padding: 8px;
10880
+ }
10881
+
10882
+ .veToolbarOrfOptionsHolder {
10883
+ min-width: 300px;
10884
+ margin-bottom: 10px;
10885
+ }
10886
+
10887
+ .veToolbarViewOptionsHolder div {
10888
+ margin-left: 10px;
10889
+ margin-bottom: 10px;
10890
+ }
10891
+ .veToolbarViewOptionsHolder label {
10892
+ margin: 40px 10px;
10893
+ }
10894
+ .ve-toolbar-item-popover {
10895
+ /* the z-index has to be high for it to work with ice */
10896
+ z-index: 4000;
10897
+ }
10760
10898
  .insertReplaceButton {
10761
10899
  width: 140px;
10762
10900
  }
@@ -11217,144 +11355,6 @@ path.partWithSelectedTag {
11217
11355
  .taLineHolder div {
11218
11356
  width: 100%;
11219
11357
  }
11220
- .Popover-body {
11221
- display: inline-flex;
11222
- flex-direction: column;
11223
- padding: 10px;
11224
- background: white;
11225
- color: black;
11226
- box-shadow: 0px 1px 9px rgba(0, 0, 0, 0.5);
11227
- z-index: 1;
11228
- margin-top: 10px;
11229
- }
11230
-
11231
- .Popover-tipShape {
11232
- fill: white;
11233
- }
11234
-
11235
- .Popover-tip {
11236
- display: none;
11237
- }
11238
-
11239
- .veToolbar .veToolbarItemOuter {
11240
- display: flex;
11241
- height: 32px;
11242
- }
11243
- .veToolbar .veToolbarItemOuter .veToolbarItem {
11244
- display: flex;
11245
- align-items: center;
11246
- height: 32px;
11247
- }
11248
- .veToolbarSpacer {
11249
- height: 80%;
11250
- width: 1px;
11251
- margin-left: 10px;
11252
- margin-right: 10px;
11253
- }
11254
- .veToolbar .veToolbarItemOuter .veToolbarIcon {
11255
- padding: 3px;
11256
- border-radius: 3px;
11257
- height: 32px;
11258
- width: 30px;
11259
- display: flex;
11260
- align-items: center;
11261
- justify-content: center;
11262
- color: #006cab;
11263
- }
11264
- .veToolbarItemOuter.disabled .veToolbarIcon {
11265
- color: #c0c0c0;
11266
- }
11267
- .veToolbar .veToolbarItemOuter .veToolbarIcon.veToolbarItemToggled {
11268
- background: lightgrey;
11269
- border-color: #006cab;
11270
- }
11271
-
11272
- .veToolbar :not(.disabled).veToolbarItemOuter .veToolbarIcon:hover {
11273
- border-color: #006cab;
11274
- }
11275
- .veToolbar .veToolbarItemOuter .veToolbarIcon:active {
11276
- opacity: 0.7;
11277
- }
11278
- .veToolbar .veToolbarItemOuter .veToolbarIcon img,
11279
- .veToolbar .veToolbarItemOuter .veToolbarIcon svg,
11280
- .veToolbar .veToolbarItemOuter .veToolbarIcon object {
11281
- cursor: pointer;
11282
- }
11283
- .veToolbar .veToolbarItemOuter .veToolbarIcon img svg,
11284
- .veToolbar .veToolbarItemOuter .veToolbarIcon svg svg,
11285
- .veToolbar .veToolbarItemOuter .veToolbarIcon object svg {
11286
- color: #006baa;
11287
- }
11288
-
11289
- .minOrfSizeInput::-webkit-inner-spin-button,
11290
- .minOrfSizeInput::-webkit-outer-spin-button {
11291
- -webkit-appearance: none;
11292
- margin: 0;
11293
- }
11294
-
11295
- .minOrfSizeInput {
11296
- padding-bottom: 0.25em;
11297
- width: 5em;
11298
- margin-left: 10px;
11299
- text-align: center;
11300
- padding-top: 0.25em;
11301
- border: 1px solid lightgrey;
11302
- justify-content: center;
11303
- display: flex;
11304
- flex-direction: column;
11305
- }
11306
-
11307
- .veToolbarDropdown {
11308
- cursor: pointer;
11309
- padding: 0px;
11310
- padding-bottom: 5px;
11311
- padding-top: 5px;
11312
- border-radius: 3px;
11313
- }
11314
- .veToolbarDropdown:hover {
11315
- background: lightgrey;
11316
- }
11317
- .veToolbarDropdown.isOpen {
11318
- background: lightgrey;
11319
- }
11320
-
11321
- .veToolbarCutsiteFilterHolder {
11322
- min-width: 300px;
11323
- }
11324
- .veToolbarCutsiteFilterHolder > div {
11325
- margin: 10px;
11326
- }
11327
- .veToolbarCutsiteFilterHolder .title {
11328
- margin: 10px;
11329
- background: blue;
11330
- width: 100%;
11331
- }
11332
-
11333
- .translateInfoSpan {
11334
- font-size: 0.8em;
11335
- padding: 4px;
11336
- }
11337
-
11338
- .showOrfTranslateSpan {
11339
- padding: 8px;
11340
- }
11341
-
11342
- .veToolbarOrfOptionsHolder {
11343
- min-width: 300px;
11344
- margin-bottom: 10px;
11345
- }
11346
-
11347
- .veToolbarViewOptionsHolder div {
11348
- margin-left: 10px;
11349
- margin-bottom: 10px;
11350
- }
11351
- .veToolbarViewOptionsHolder label {
11352
- margin: 40px 10px;
11353
- }
11354
- .ve-toolbar-item-popover {
11355
- /* the z-index has to be high for it to work with ice */
11356
- z-index: 4000;
11357
- }
11358
11358
  .veMergeFeaturesDialog .bp3-form-content {
11359
11359
  flex-grow: 1;
11360
11360
  }