Browse Source

expanded OpenFileControls into ImportControls; updated molstar

Alexander Rose 4 years ago
parent
commit
3309424a8c

+ 6 - 288
package-lock.json

@@ -30,21 +30,6 @@
                 "js-tokens": "^4.0.0"
             }
         },
-        "@babel/runtime": {
-            "version": "7.9.6",
-            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz",
-            "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==",
-            "dev": true,
-            "requires": {
-                "regenerator-runtime": "^0.13.4"
-            }
-        },
-        "@emotion/hash": {
-            "version": "0.8.0",
-            "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
-            "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==",
-            "dev": true
-        },
         "@jest/types": {
             "version": "25.5.0",
             "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz",
@@ -109,100 +94,6 @@
                 }
             }
         },
-        "@material-ui/core": {
-            "version": "4.9.13",
-            "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.9.13.tgz",
-            "integrity": "sha512-GEXNwUr+laZ0N+F1efmHB64Fyg+uQIRXLqbSejg3ebSXgLYNpIjnMOPRfWdu4rICq0dAIgvvNXGkKDMcf3AMpA==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.4.4",
-                "@material-ui/react-transition-group": "^4.3.0",
-                "@material-ui/styles": "^4.9.13",
-                "@material-ui/system": "^4.9.13",
-                "@material-ui/types": "^5.0.1",
-                "@material-ui/utils": "^4.9.12",
-                "@types/react-transition-group": "^4.2.0",
-                "clsx": "^1.0.4",
-                "hoist-non-react-statics": "^3.3.2",
-                "popper.js": "^1.16.1-lts",
-                "prop-types": "^15.7.2",
-                "react-is": "^16.8.0",
-                "react-transition-group": "^4.3.0"
-            }
-        },
-        "@material-ui/icons": {
-            "version": "4.9.1",
-            "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.9.1.tgz",
-            "integrity": "sha512-GBitL3oBWO0hzBhvA9KxqcowRUsA0qzwKkURyC8nppnC3fw54KPKZ+d4V1Eeg/UnDRSzDaI9nGCdel/eh9AQMg==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.4.4"
-            }
-        },
-        "@material-ui/react-transition-group": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/@material-ui/react-transition-group/-/react-transition-group-4.3.0.tgz",
-            "integrity": "sha512-CwQ0aXrlUynUTY6sh3UvKuvye1o92en20VGAs6TORnSxUYeRmkX8YeTUN3lAkGiBX1z222FxLFO36WWh6q73rQ==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.5.5",
-                "dom-helpers": "^5.0.1",
-                "loose-envify": "^1.4.0",
-                "prop-types": "^15.6.2"
-            }
-        },
-        "@material-ui/styles": {
-            "version": "4.9.13",
-            "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.9.13.tgz",
-            "integrity": "sha512-lWlXJanBdHQ18jW/yphedRokHcvZD1GdGzUF/wQxKDsHwDDfO45ZkAxuSBI202dG+r1Ph483Z3pFykO2obeSRA==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.4.4",
-                "@emotion/hash": "^0.8.0",
-                "@material-ui/types": "^5.0.1",
-                "@material-ui/utils": "^4.9.6",
-                "clsx": "^1.0.4",
-                "csstype": "^2.5.2",
-                "hoist-non-react-statics": "^3.3.2",
-                "jss": "^10.0.3",
-                "jss-plugin-camel-case": "^10.0.3",
-                "jss-plugin-default-unit": "^10.0.3",
-                "jss-plugin-global": "^10.0.3",
-                "jss-plugin-nested": "^10.0.3",
-                "jss-plugin-props-sort": "^10.0.3",
-                "jss-plugin-rule-value-function": "^10.0.3",
-                "jss-plugin-vendor-prefixer": "^10.0.3",
-                "prop-types": "^15.7.2"
-            }
-        },
-        "@material-ui/system": {
-            "version": "4.9.13",
-            "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.9.13.tgz",
-            "integrity": "sha512-6AlpvdW6KJJ5bF1Xo2OD13sCN8k+nlL36412/bWnWZOKIfIMo/Lb8c8d1DOIaT/RKWxTEUaWnKZjabVnA3eZjA==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.4.4",
-                "@material-ui/utils": "^4.9.6",
-                "prop-types": "^15.7.2"
-            }
-        },
-        "@material-ui/types": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.0.1.tgz",
-            "integrity": "sha512-wURPSY7/3+MAtng3i26g+WKwwNE3HEeqa/trDBR5+zWKmcjO+u9t7Npu/J1r+3dmIa/OeziN9D/18IrBKvKffw==",
-            "dev": true
-        },
-        "@material-ui/utils": {
-            "version": "4.9.12",
-            "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.9.12.tgz",
-            "integrity": "sha512-/0rgZPEOcZq5CFA4+4n6Q6zk7fi8skHhH2Bcra8R3epoJEYy5PL55LuMazPtPH1oKeRausDV/Omz4BbgFsn1HQ==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.4.4",
-                "prop-types": "^15.7.2",
-                "react-is": "^16.8.0"
-            }
-        },
         "@types/argparse": {
             "version": "1.0.38",
             "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz",
@@ -210,9 +101,9 @@
             "dev": true
         },
         "@types/benchmark": {
-            "version": "1.0.31",
-            "resolved": "https://registry.npmjs.org/@types/benchmark/-/benchmark-1.0.31.tgz",
-            "integrity": "sha512-F6fVNOkGEkSdo/19yWYOwVKGvzbTeWkR/XQYBKtGBQ9oGRjBN9f/L4aJI4sDcVPJO58Y1CJZN8va9V2BhrZapA==",
+            "version": "1.0.32",
+            "resolved": "https://registry.npmjs.org/@types/benchmark/-/benchmark-1.0.32.tgz",
+            "integrity": "sha512-4Kvh0+5zGs38ZtLgy+olEYpLoBwt+QcvQvURDngEtXnf3u282OFWq+c76Quzz0YsAlnFhKuB2QgAFiRHI/n7rA==",
             "dev": true
         },
         "@types/body-parser": {
@@ -378,15 +269,6 @@
                 "@types/react": "*"
             }
         },
-        "@types/react-transition-group": {
-            "version": "4.2.4",
-            "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.2.4.tgz",
-            "integrity": "sha512-8DMUaDqh0S70TjkqU0DxOu80tFUiiaS9rxkWip/nb7gtvAsbqOXm02UCmR8zdcjWujgeYPiPNTVpVpKzUDotwA==",
-            "dev": true,
-            "requires": {
-                "@types/react": "*"
-            }
-        },
         "@types/serve-static": {
             "version": "1.13.3",
             "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz",
@@ -1473,12 +1355,6 @@
                 "shallow-clone": "^3.0.0"
             }
         },
-        "clsx": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz",
-            "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==",
-            "dev": true
-        },
         "co": {
             "version": "4.6.0",
             "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -1850,16 +1726,6 @@
                 }
             }
         },
-        "css-vendor": {
-            "version": "2.0.8",
-            "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz",
-            "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.8.3",
-                "is-in-browser": "^1.0.2"
-            }
-        },
         "cssesc": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@@ -2051,16 +1917,6 @@
                 "esutils": "^2.0.2"
             }
         },
-        "dom-helpers": {
-            "version": "5.1.4",
-            "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz",
-            "integrity": "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.8.7",
-                "csstype": "^2.6.7"
-            }
-        },
         "domain-browser": {
             "version": "1.2.0",
             "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -3927,15 +3783,6 @@
                 "minimalistic-crypto-utils": "^1.0.1"
             }
         },
-        "hoist-non-react-statics": {
-            "version": "3.3.2",
-            "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
-            "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
-            "dev": true,
-            "requires": {
-                "react-is": "^16.7.0"
-            }
-        },
         "homedir-polyfill": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
@@ -3989,12 +3836,6 @@
             "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
             "dev": true
         },
-        "hyphenate-style-name": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz",
-            "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==",
-            "dev": true
-        },
         "iconv-lite": {
             "version": "0.4.24",
             "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -4366,12 +4207,6 @@
                 "is-extglob": "^2.1.1"
             }
         },
-        "is-in-browser": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz",
-            "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=",
-            "dev": true
-        },
         "is-number": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
@@ -4637,91 +4472,6 @@
                 "verror": "1.10.0"
             }
         },
-        "jss": {
-            "version": "10.1.1",
-            "resolved": "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz",
-            "integrity": "sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.3.1",
-                "csstype": "^2.6.5",
-                "is-in-browser": "^1.1.3",
-                "tiny-warning": "^1.0.2"
-            }
-        },
-        "jss-plugin-camel-case": {
-            "version": "10.1.1",
-            "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.1.1.tgz",
-            "integrity": "sha512-MDIaw8FeD5uFz1seQBKz4pnvDLnj5vIKV5hXSVdMaAVq13xR6SVTVWkIV/keyTs5txxTvzGJ9hXoxgd1WTUlBw==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.3.1",
-                "hyphenate-style-name": "^1.0.3",
-                "jss": "10.1.1"
-            }
-        },
-        "jss-plugin-default-unit": {
-            "version": "10.1.1",
-            "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.1.1.tgz",
-            "integrity": "sha512-UkeVCA/b3QEA4k0nIKS4uWXDCNmV73WLHdh2oDGZZc3GsQtlOCuiH3EkB/qI60v2MiCq356/SYWsDXt21yjwdg==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.3.1",
-                "jss": "10.1.1"
-            }
-        },
-        "jss-plugin-global": {
-            "version": "10.1.1",
-            "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.1.1.tgz",
-            "integrity": "sha512-VBG3wRyi3Z8S4kMhm8rZV6caYBegsk+QnQZSVmrWw6GVOT/Z4FA7eyMu5SdkorDlG/HVpHh91oFN56O4R9m2VA==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.3.1",
-                "jss": "10.1.1"
-            }
-        },
-        "jss-plugin-nested": {
-            "version": "10.1.1",
-            "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.1.1.tgz",
-            "integrity": "sha512-ozEu7ZBSVrMYxSDplPX3H82XHNQk2DQEJ9TEyo7OVTPJ1hEieqjDFiOQOxXEj9z3PMqkylnUbvWIZRDKCFYw5Q==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.3.1",
-                "jss": "10.1.1",
-                "tiny-warning": "^1.0.2"
-            }
-        },
-        "jss-plugin-props-sort": {
-            "version": "10.1.1",
-            "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.1.1.tgz",
-            "integrity": "sha512-g/joK3eTDZB4pkqpZB38257yD4LXB0X15jxtZAGbUzcKAVUHPl9Jb47Y7lYmiGsShiV4YmQRqG1p2DHMYoK91g==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.3.1",
-                "jss": "10.1.1"
-            }
-        },
-        "jss-plugin-rule-value-function": {
-            "version": "10.1.1",
-            "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.1.1.tgz",
-            "integrity": "sha512-ClV1lvJ3laU9la1CUzaDugEcwnpjPTuJ0yGy2YtcU+gG/w9HMInD5vEv7xKAz53Bk4WiJm5uLOElSEshHyhKNw==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.3.1",
-                "jss": "10.1.1"
-            }
-        },
-        "jss-plugin-vendor-prefixer": {
-            "version": "10.1.1",
-            "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.1.1.tgz",
-            "integrity": "sha512-09MZpQ6onQrhaVSF6GHC4iYifQ7+4YC/tAP6D4ZWeZotvCMq1mHLqNKRIaqQ2lkgANjlEot2JnVi1ktu4+L4pw==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.3.1",
-                "css-vendor": "^2.0.7",
-                "jss": "10.1.1"
-            }
-        },
         "kind-of": {
             "version": "6.0.3",
             "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -5117,13 +4867,11 @@
             }
         },
         "molstar": {
-            "version": "0.7.1-dev.3",
-            "resolved": "https://registry.npmjs.org/molstar/-/molstar-0.7.1-dev.3.tgz",
-            "integrity": "sha512-le1h+3yEWn/rQu05mDkawVxyUUvezuzmzP4pRuyYl8d3cE/75cjr3a1HdAh9haDzdGB8g2hU10YzAcrWDP3cug==",
+            "version": "0.7.1-dev.4",
+            "resolved": "https://registry.npmjs.org/molstar/-/molstar-0.7.1-dev.4.tgz",
+            "integrity": "sha512-eKC+EL5ccCC7CWlxfbPYhpcZ4T1XEI2PkVa+dlrnjqd0AiVeRhktc22zMcfKpeu04HVjHaVAdO+iPIL4x6VRiQ==",
             "dev": true,
             "requires": {
-                "@material-ui/core": "^4.9.13",
-                "@material-ui/icons": "^4.9.1",
                 "@types/argparse": "^1.0.38",
                 "@types/benchmark": "^1.0.31",
                 "@types/compression": "1.7.0",
@@ -5855,12 +5603,6 @@
                 "find-up": "^3.0.0"
             }
         },
-        "popper.js": {
-            "version": "1.16.1",
-            "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
-            "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
-            "dev": true
-        },
         "posix-character-classes": {
             "version": "0.1.1",
             "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
@@ -6235,18 +5977,6 @@
             "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
             "dev": true
         },
-        "react-transition-group": {
-            "version": "4.4.1",
-            "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz",
-            "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.5.5",
-                "dom-helpers": "^5.0.1",
-                "loose-envify": "^1.4.0",
-                "prop-types": "^15.6.2"
-            }
-        },
         "read-pkg": {
             "version": "4.0.1",
             "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
@@ -6344,12 +6074,6 @@
                 "strip-indent": "^1.0.1"
             }
         },
-        "regenerator-runtime": {
-            "version": "0.13.5",
-            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-            "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
-            "dev": true
-        },
         "regex-not": {
             "version": "1.0.2",
             "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
@@ -7441,12 +7165,6 @@
                 "setimmediate": "^1.0.4"
             }
         },
-        "tiny-warning": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
-            "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
-            "dev": true
-        },
         "tmp": {
             "version": "0.0.33",
             "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",

+ 1 - 1
package.json

@@ -50,7 +50,7 @@
         "extra-watch-webpack-plugin": "^1.0.3",
         "file-loader": "^6.0.0",
         "mini-css-extract-plugin": "^0.9.0",
-        "molstar": "^0.7.1-dev.3",
+        "molstar": "^0.7.1-dev.4",
         "node-fetch": "^2.6.0",
         "node-sass": "^4.14.1",
         "raw-loader": "^4.0.1",

+ 1 - 1
src/structure-viewer/index.html

@@ -51,7 +51,7 @@
             const props = _props && JSON.parse(_props)
 
             // create an instance of the plugin
-            var viewer = new app.StructureViewer('app', { showOpenFileControls: !pdbId })
+            var viewer = new app.StructureViewer('app', { showImportControls: !pdbId })
 
             // load pdbId or url
             if (pdbId) viewer.loadPdbId(pdbId, props)

+ 5 - 3
src/structure-viewer/index.ts

@@ -47,7 +47,7 @@ export const DefaultStructureViewerProps: StructureViewerProps = {
             format: 'cif' as const
         })
     ],
-    showOpenFileControls: false,
+    showImportControls: false,
 }
 
 export class StructureViewer {
@@ -90,7 +90,9 @@ export class StructureViewer {
                 }
             },
             config: [
-                [PluginConfig.VolumeStreaming.DefaultServer, this.props.volumeServerUrl]
+                [PluginConfig.VolumeStreaming.DefaultServer, this.props.volumeServerUrl],
+                [PluginConfig.Download.DefaultPdbProvider, 'rcsb'],
+                [PluginConfig.Download.DefaultEmdbProvider, 'rcsb']
             ]
         });
 
@@ -112,7 +114,7 @@ export class StructureViewer {
         const renderer = this.plugin.canvas3d!.props.renderer;
         PluginCommands.Canvas3D.SetSettings(this.plugin, { settings: { renderer: { ...renderer, backgroundColor: ColorNames.white } } });
         PluginCommands.Layout.Update(this.plugin, { state: { regionState: {
-            bottom: this.props.showOpenFileControls ? 'full' : 'hidden',
+            bottom: this.props.showImportControls ? 'full' : 'hidden',
             top: 'full',
             left: 'hidden',
             right: 'full'

+ 1 - 1
src/structure-viewer/types.ts

@@ -16,7 +16,7 @@ export type ModelUrlProvider = (pdbId: string) => {
 export interface StructureViewerProps {
     volumeServerUrl: string,
     modelUrlProviders: ModelUrlProvider[],
-    showOpenFileControls: boolean,
+    showImportControls: boolean,
 }
 
 export type SupportedFormats = 'cif' | 'bcif'

+ 3 - 3
src/structure-viewer/ui/controls.tsx

@@ -11,7 +11,7 @@ import { Viewport, ViewportControls } from 'molstar/lib/mol-plugin-ui/viewport';
 import { BackgroundTaskProgress } from 'molstar/lib/mol-plugin-ui/task';
 import { LociLabels, CustomStructureControls, SelectionViewportControls } from 'molstar/lib/mol-plugin-ui/controls';
 import { Toasts } from 'molstar/lib/mol-plugin-ui/toast';
-import { OpenFilesControls } from './open';
+import { ImportControls } from './import';
 import { StructureSourceControls } from 'molstar/lib/mol-plugin-ui/structure/source';
 import { StructureMeasurementsControls } from 'molstar/lib/mol-plugin-ui/structure/measurements';
 import { StructureSuperpositionControls } from 'molstar/lib/mol-plugin-ui/structure/superposition';
@@ -47,9 +47,9 @@ export class ControlsWrapper extends PluginUIComponent {
     }
 
     render() {
-        const { showOpenFileControls } = this.customState.props
+        const { showImportControls } = this.customState.props
         return <div className='msp-scrollable-container'>
-            {showOpenFileControls && <OpenFilesControls />}
+            {showImportControls && <ImportControls />}
             <StructureTools />
         </div>;
     }

+ 30 - 0
src/structure-viewer/ui/import.tsx

@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author Alexander Rose <alexander.rose@weirdbyte.de>
+ */
+
+import * as React from 'react';
+import { StateTransform } from 'molstar/lib/mol-state';
+import { OpenFiles } from 'molstar/lib/mol-plugin-state/actions/file';
+import { DownloadStructure } from 'molstar/lib/mol-plugin-state/actions/structure';
+import { ApplyActionControl } from 'molstar/lib/mol-plugin-ui/state/apply-action';
+import { CollapsableControls } from 'molstar/lib/mol-plugin-ui/base';
+import { FileOutlineSvg } from 'molstar/lib/mol-plugin-ui/controls/icons';
+
+export class ImportControls extends CollapsableControls {
+    protected defaultState() {
+        return {
+            header: 'Import',
+            isCollapsed: true,
+            brand: { accent:  'gray' as const, svg: FileOutlineSvg }
+        }
+    }
+
+    renderControls() {
+        return <div className={'msp-control-offset'} style={{ paddingTop: '1px' }}>
+            <ApplyActionControl key={`${OpenFiles.id}`} state={this.plugin.state.data} action={OpenFiles} nodeRef={StateTransform.RootRef} initiallyCollapsed={true} />
+            <ApplyActionControl key={`${DownloadStructure.id}`} state={this.plugin.state.data} action={DownloadStructure} nodeRef={StateTransform.RootRef} initiallyCollapsed={true} />
+        </div>
+    }
+}

+ 0 - 17
src/structure-viewer/ui/open.tsx

@@ -1,17 +0,0 @@
-/**
- * Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
-
-import * as React from 'react';
-import { StateTransform } from 'molstar/lib/mol-state';
-import { OpenFiles } from 'molstar/lib/mol-plugin-state/actions/file';
-import { ApplyActionControl } from 'molstar/lib/mol-plugin-ui/state/apply-action';
-import { PluginUIComponent } from 'molstar/lib/mol-plugin-ui/base';
-
-export class OpenFilesControls extends PluginUIComponent {
-    render() {
-        return <ApplyActionControl key={`${OpenFiles.id}`} state={this.plugin.state.data} action={OpenFiles} nodeRef={StateTransform.RootRef} initiallyCollapsed={false} />
-    }
-}