@abi-software/simulationvuer 3.0.12 → 3.0.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": "@abi-software/simulationvuer",
3
- "version": "3.0.12",
3
+ "version": "3.0.14",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "vite serve --host --force",
@@ -8,6 +8,9 @@
8
8
  "build-app": "vite build --mode app",
9
9
  "vuese-gen": "node vuese-generator.js",
10
10
  "vuese-watch": "node vuese-generator.js watch",
11
+ "format": "prettier --write .",
12
+ "format:check": "prettier --check .",
13
+ "lint": "eslint . --ext .js,.vue",
11
14
  "release:beta": "npm version prerelease --preid=beta; npm publish --tag beta",
12
15
  "release:minor": "npm version minor; npm publish",
13
16
  "release:patch": "npm version patch; npm publish",
@@ -18,7 +21,7 @@
18
21
  },
19
22
  "dependencies": {
20
23
  "@abi-software/plotvuer": "1.0.7",
21
- "@opencor/opencor": "^0.20260304.2",
24
+ "@opencor/opencor": "^0.20260314.0",
22
25
  "element-plus": "2.8.4",
23
26
  "jsonschema": "^1.4.0",
24
27
  "mathjs": "^15.1.0",
@@ -26,6 +29,7 @@
26
29
  "vue": "^3.4.21"
27
30
  },
28
31
  "devDependencies": {
32
+ "@babel/eslint-parser": "^7.28.6",
29
33
  "@vitejs/plugin-vue": "^5.0.3",
30
34
  "@vuese/markdown-render": "^2.11.3",
31
35
  "babel-eslint": "^10.1.0",
@@ -34,7 +38,10 @@
34
38
  "chokidar": "^3.6.0",
35
39
  "concurrently": "^8.2.2",
36
40
  "eslint": "^8.56.0",
41
+ "eslint-config-prettier": "^9.0.0",
42
+ "eslint-plugin-prettier": "^5.0.0",
37
43
  "eslint-plugin-vue": "^9.20.1",
44
+ "prettier": "^3.0.0",
38
45
  "sass": "^1.70.0",
39
46
  "vite": "^5.0.12",
40
47
  "vitepress": "^1.0.0-rc.45",
@@ -44,15 +51,20 @@
44
51
  },
45
52
  "eslintConfig": {
46
53
  "root": true,
54
+ "plugins": [
55
+ "prettier"
56
+ ],
57
+ "extends": [
58
+ "eslint:recommended",
59
+ "plugin:prettier/recommended",
60
+ "plugin:vue/essential"
61
+ ],
47
62
  "env": {
48
63
  "node": true
49
64
  },
50
- "extends": [
51
- "plugin:vue/essential",
52
- "eslint:recommended"
53
- ],
54
65
  "parserOptions": {
55
- "parser": "babel-eslint"
66
+ "parser": "@babel/eslint-parser",
67
+ "requireConfigFile": false
56
68
  },
57
69
  "rules": {}
58
70
  },
package/public/index.html CHANGED
@@ -1,15 +1,19 @@
1
- <!DOCTYPE html>
1
+ <!doctype html>
2
2
  <html lang="en">
3
3
  <head>
4
- <meta charset="utf-8">
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0">
7
- <link rel="icon" href="<%= BASE_URL %>favicon.ico">
4
+ <meta charset="utf-8" />
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
+ <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
+ <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
8
8
  <title><%= htmlWebpackPlugin.options.title %></title>
9
9
  </head>
10
10
  <body>
11
11
  <noscript>
12
- <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
12
+ <strong
13
+ >We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work
14
+ properly without JavaScript enabled. Please enable it to
15
+ continue.</strong
16
+ >
13
17
  </noscript>
14
18
  <div id="app"></div>
15
19
  <!-- built files will be auto injected -->
package/src/App.vue CHANGED
@@ -5,29 +5,57 @@
5
5
  <div v-if="datasetIds.length !== 0">
6
6
  <h3>Dataset IDs (run on o²S²PARC):</h3>
7
7
  <el-radio-group v-model="activeResource" size="small">
8
- <el-radio-button :class="className(datasetId.id)" v-for="datasetId in datasetIds" v-bind:key="datasetId.id" :label="datasetId.label" :value="datasetId.id" />
8
+ <el-radio-button
9
+ :class="className(datasetId.id)"
10
+ v-for="datasetId in datasetIds"
11
+ v-bind:key="datasetId.id"
12
+ :label="datasetId.label"
13
+ :value="datasetId.id"
14
+ />
9
15
  </el-radio-group>
10
16
  </div>
11
17
  <div v-if="datasetUrls.length !== 0">
12
18
  <h3>Dataset URLs (run in the browser):</h3>
13
19
  <el-radio-group v-model="activeResource" size="small">
14
- <el-radio-button :class="className(datasetUrl.id)" v-for="datasetUrl in datasetUrls" v-bind:key="datasetUrl.id" :label="datasetUrl.label" :value="datasetUrl.id" />
20
+ <el-radio-button
21
+ :class="className(datasetUrl.id)"
22
+ v-for="datasetUrl in datasetUrls"
23
+ v-bind:key="datasetUrl.id"
24
+ :label="datasetUrl.label"
25
+ :value="datasetUrl.id"
26
+ />
15
27
  </el-radio-group>
16
28
  </div>
17
29
  <div v-if="pmrPaths.length !== 0">
18
30
  <h3>PMR paths (run in the browser):</h3>
19
31
  <el-radio-group v-model="activeResource" size="small">
20
- <el-radio-button :class="className(pmrPath.id)" v-for="pmrPath in pmrPaths" v-bind:key="pmrPath.id" :label="pmrPath.label" :value="pmrPath.id" />
32
+ <el-radio-button
33
+ :class="className(pmrPath.id)"
34
+ v-for="pmrPath in pmrPaths"
35
+ v-bind:key="pmrPath.id"
36
+ :label="pmrPath.label"
37
+ :value="pmrPath.id"
38
+ />
21
39
  </el-radio-group>
22
40
  </div>
23
- <div ref="dropArea" class="drop-area" @dragenter.prevent="onDragEnter" @dragover.prevent @drop.prevent="onDrop" @dragleave.prevent="onDragLeave">
41
+ <div
42
+ ref="dropArea"
43
+ class="drop-area"
44
+ @dragenter.prevent="onDragEnter"
45
+ @dragover.prevent
46
+ @drop.prevent="onDrop"
47
+ @dragleave.prevent="onDragLeave"
48
+ >
24
49
  You can drag and drop a COMBINE archive here.
25
50
  </div>
26
51
  <el-dialog v-model="dragAndDropWarningVisible" width="352">
27
52
  <span>Please only drag and drop one COMBINE archive.</span>
28
53
  <template #footer>
29
54
  <div class="dialog-footer">
30
- <el-button type="primary" @click="dragAndDropWarningVisible = false">
55
+ <el-button
56
+ type="primary"
57
+ @click="dragAndDropWarningVisible = false"
58
+ >
31
59
  OK
32
60
  </el-button>
33
61
  </div>
@@ -36,19 +64,42 @@
36
64
  </div>
37
65
  <hr />
38
66
  <div v-for="resource in resources()" v-bind:key="resource.id">
39
- <div v-if="isResourceInitialised(resource.id)" v-show="resource.id === activeResource">
67
+ <div
68
+ v-if="isResourceInitialised(resource.id)"
69
+ v-show="resource.id === activeResource"
70
+ >
40
71
  <div v-if="typeof resource.id === 'number'">
41
72
  <span>
42
- <strong>Dataset <a :href="datasetUrl(resource.id)" target="_blank">{{ resource.id }}</a>:</strong> {{ resource.description }}
73
+ <strong
74
+ >Dataset
75
+ <a
76
+ :href="datasetUrl(resource.id)"
77
+ target="_blank"
78
+ rel="noopener noreferrer"
79
+ >{{ resource.id }}</a
80
+ >:</strong
81
+ >
82
+ {{ resource.description }}
43
83
  </span>
44
84
  <hr />
45
85
  </div>
46
- <SimulationVuer :apiLocation="apiLocation" :id="resource.id" style="height: 640px;" />
86
+ <SimulationVuer
87
+ :apiLocation="apiLocation"
88
+ :id="resource.id"
89
+ style="height: 640px"
90
+ />
47
91
  </div>
48
92
  </div>
49
93
  <div v-if="activeResource === -1">
50
- <div v-for="combineArchive in combineArchives" v-bind:key="combineArchive">
51
- <SimulationVuer :apiLocation="apiLocation" :id="combineArchive" style="height: 640px;" />
94
+ <div
95
+ v-for="combineArchive in combineArchives"
96
+ v-bind:key="combineArchive"
97
+ >
98
+ <SimulationVuer
99
+ :apiLocation="apiLocation"
100
+ :id="combineArchive"
101
+ style="height: 640px"
102
+ />
52
103
  </div>
53
104
  </div>
54
105
  <hr />
@@ -56,9 +107,10 @@
56
107
  </template>
57
108
 
58
109
  <script>
59
- import SimulationVuer from "./components/SimulationVuer.vue";
60
110
  import { ElRadioButton, ElRadioGroup } from "element-plus";
61
111
 
112
+ import SimulationVuer from "./components/SimulationVuer.vue";
113
+
62
114
  export default {
63
115
  name: "App",
64
116
  components: {
@@ -66,7 +118,7 @@ export default {
66
118
  ElRadioButton,
67
119
  ElRadioGroup,
68
120
  },
69
- data: function () {
121
+ data: () => {
70
122
  return {
71
123
  apiLocation: import.meta.env.VITE_API_LOCATION,
72
124
  dropAreaCounter: 0,
@@ -74,27 +126,92 @@ export default {
74
126
  combineArchives: [],
75
127
  datasetIds: [
76
128
  { id: 0, label: "Invalid", description: "Non-simulation dataset" },
77
- { id: 135, label: "135", description: "Computational analysis of the human sinus node action potential - Model development and effects of mutations" },
78
- { id: 157, label: "157", description: "Fabbri-based composite SAN model" },
129
+ {
130
+ id: 135,
131
+ label: "135",
132
+ description:
133
+ "Computational analysis of the human sinus node action potential - Model development and effects of mutations",
134
+ },
135
+ {
136
+ id: 157,
137
+ label: "157",
138
+ description: "Fabbri-based composite SAN model",
139
+ },
79
140
  { id: 308, label: "308", description: "Kember Cardiac Nerve Model" },
80
- { id: 318, label: "318", description: "Multi-scale rabbit cardiac electrophysiology models" },
81
- { id: 320, label: "320", description: "Multi-scale human cardiac electrophysiology models" },
141
+ {
142
+ id: 318,
143
+ label: "318",
144
+ description: "Multi-scale rabbit cardiac electrophysiology models",
145
+ },
146
+ {
147
+ id: 320,
148
+ label: "320",
149
+ description: "Multi-scale human cardiac electrophysiology models",
150
+ },
82
151
  ],
83
152
  datasetUrls: [
84
- { id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/invalid.omex", label: "Invalid", description: "COMBINE archive" },
85
- { id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/135.omex", label: "135", description: "COMBINE archive" },
86
- { id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/157.omex", label: "157", description: "COMBINE archive" },
87
- { id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/lorenz.omex", label: "Lorenz", description: "COMBINE archive" },
88
- { id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/tt04_with_names.omex", label: "TT04", description: "COMBINE archive" },
89
- { id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/cvs.omex", label: "CVS", description: "COMBINE archive" },
153
+ {
154
+ id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/invalid.omex",
155
+ label: "Invalid",
156
+ description: "COMBINE archive",
157
+ },
158
+ {
159
+ id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/135.omex",
160
+ label: "135",
161
+ description: "COMBINE archive",
162
+ },
163
+ {
164
+ id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/157.omex",
165
+ label: "157",
166
+ description: "COMBINE archive",
167
+ },
168
+ {
169
+ id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/lorenz.omex",
170
+ label: "Lorenz",
171
+ description: "COMBINE archive",
172
+ },
173
+ {
174
+ id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/tt04_with_names.omex",
175
+ label: "TT04",
176
+ description: "COMBINE archive",
177
+ },
178
+ {
179
+ id: "https://raw.githubusercontent.com/opencor/webapp/refs/heads/main/tests/models/ui/cvs.omex",
180
+ label: "CVS",
181
+ description: "COMBINE archive",
182
+ },
90
183
  ],
91
184
  pmrPaths: [
92
- { id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/invalid.omex", label: "Invalid", description: "COMBINE archive from PMR" },
93
- { id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/135.omex", label: "135", description: "COMBINE archive from PMR" },
94
- { id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/157.omex", label: "157", description: "COMBINE archive from PMR" },
95
- { id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/lorenz.omex", label: "Lorenz", description: "COMBINE archive from PMR" },
96
- { id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/tt04.omex", label: "TT04", description: "COMBINE archive from PMR" },
97
- { id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/cvs.omex", label: "CVS", description: "COMBINE archive from PMR" },
185
+ {
186
+ id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/invalid.omex",
187
+ label: "Invalid",
188
+ description: "COMBINE archive from PMR",
189
+ },
190
+ {
191
+ id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/135.omex",
192
+ label: "135",
193
+ description: "COMBINE archive from PMR",
194
+ },
195
+ {
196
+ id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/157.omex",
197
+ label: "157",
198
+ description: "COMBINE archive from PMR",
199
+ },
200
+ {
201
+ id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/lorenz.omex",
202
+ label: "Lorenz",
203
+ description: "COMBINE archive from PMR",
204
+ },
205
+ {
206
+ id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/tt04.omex",
207
+ label: "TT04",
208
+ description: "COMBINE archive from PMR",
209
+ },
210
+ {
211
+ id: "workspace/b7c/rawfile/e0ae8d2d56aaaa091e23e1ee7e84cacbda1dfb6b/cvs.omex",
212
+ label: "CVS",
213
+ description: "COMBINE archive from PMR",
214
+ },
98
215
  ],
99
216
  activeResource: 0,
100
217
  initialisedResources: [],
@@ -102,11 +219,11 @@ export default {
102
219
  },
103
220
  methods: {
104
221
  className(id) {
105
- return ( ((this.datasetIds.length !== 0) && (id === this.datasetIds[0].id))
106
- || ((this.datasetUrls.length !== 0) && (id === this.datasetUrls[0].id))
107
- || ((this.pmrPaths.length !== 0) && (id === this.pmrPaths[0].id))) ?
108
- "first-resource" :
109
- "not-first-resource";
222
+ return (this.datasetIds.length !== 0 && id === this.datasetIds[0].id) ||
223
+ (this.datasetUrls.length !== 0 && id === this.datasetUrls[0].id) ||
224
+ (this.pmrPaths.length !== 0 && id === this.pmrPaths[0].id)
225
+ ? "first-resource"
226
+ : "not-first-resource";
110
227
  },
111
228
  resources() {
112
229
  return this.datasetIds.concat(this.datasetUrls).concat(this.pmrPaths);
@@ -129,34 +246,32 @@ export default {
129
246
  this.dropAreaCounter += 1;
130
247
 
131
248
  if (this.dropAreaCounter === 1) {
132
- this.$refs.dropArea.classList.add('drop-area-active');
249
+ this.$refs.dropArea.classList.add("drop-area-active");
133
250
  }
134
251
  },
135
252
  onDrop(event) {
136
253
  this.dropAreaCounter = 0;
137
254
 
138
- this.$refs.dropArea.classList.remove('drop-area-active');
255
+ this.$refs.dropArea.classList.remove("drop-area-active");
139
256
 
140
257
  const files = event.dataTransfer.files;
141
258
 
142
259
  if (files.length !== 1) {
143
260
  this.dragAndDropWarningVisible = true;
144
261
  } else {
145
- files[0]
146
- .arrayBuffer()
147
- .then((arrayBuffer) => {
148
- this.activeResource = -1;
149
- this.combineArchives = [new Uint8Array(arrayBuffer)];
150
- })
262
+ files[0].arrayBuffer().then((arrayBuffer) => {
263
+ this.activeResource = -1;
264
+ this.combineArchives = [new Uint8Array(arrayBuffer)];
265
+ });
151
266
  }
152
267
  },
153
268
  onDragLeave() {
154
269
  this.dropAreaCounter -= 1;
155
270
 
156
271
  if (this.dropAreaCounter === 0) {
157
- this.$refs.dropArea.classList.remove('drop-area-active');
272
+ this.$refs.dropArea.classList.remove("drop-area-active");
158
273
  }
159
- }
274
+ },
160
275
  },
161
276
  };
162
277
  </script>
@@ -202,15 +317,15 @@ export default {
202
317
  color: #8300bf;
203
318
  }
204
319
 
205
- .first-resource>.el-radio-button__inner {
320
+ .first-resource > .el-radio-button__inner {
206
321
  border-left: 1px solid #8300bf !important;
207
322
  }
208
323
 
209
- .not-first-resource>.el-radio-button__inner {
324
+ .not-first-resource > .el-radio-button__inner {
210
325
  border-left: 0 !important;
211
326
  }
212
327
 
213
- .el-radio-button__original-radio:checked+.el-radio-button__inner {
328
+ .el-radio-button__original-radio:checked + .el-radio-button__inner {
214
329
  background-color: #8300bf !important;
215
330
  border-color: #8300bf !important;
216
331
  color: white;
@@ -1,15 +1,15 @@
1
1
  // Primary colors
2
- $purple: #8300BF;
3
- $darkBlue: #24245B;
2
+ $purple: #8300bf;
3
+ $darkBlue: #24245b;
4
4
  $grey: #303133;
5
5
 
6
6
  // Secondary colors
7
- $lightPurple: #BC00FC;
8
- $blue: #0026FF;
7
+ $lightPurple: #bc00fc;
8
+ $blue: #0026ff;
9
9
 
10
10
  // Status colors
11
11
  $success: #5e9f69;
12
- $warning: #FF8400;
12
+ $warning: #ff8400;
13
13
  $danger: #b51d09;
14
14
 
15
15
  // Text colors
@@ -18,12 +18,12 @@ $mediumGrey: #606266;
18
18
  $lightGrey: #909399;
19
19
 
20
20
  // Line colors
21
- $lineColor1: #DCDFE6;
22
- $lineColor2: #E4E7ED;
21
+ $lineColor1: #dcdfe6;
22
+ $lineColor2: #e4e7ed;
23
23
 
24
24
  // Background colors
25
- $background: #F5F7FA;
26
- $cochlear: #FFFFFF;
25
+ $background: #f5f7fa;
26
+ $cochlear: #ffffff;
27
27
 
28
28
  //Search box colors
29
29
  $darkGrey: #606266;
@@ -33,8 +33,10 @@ $app-secondary-color: $darkBlue;
33
33
  $text-color: $grey;
34
34
  $input-text: $grey;
35
35
 
36
- $system-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif !important;
37
- $font-family: 'Asap', sans-serif;
36
+ $system-font:
37
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu,
38
+ Cantarell, "Helvetica Neue", sans-serif !important;
39
+ $font-family: "Asap", sans-serif;
38
40
 
39
41
  // Viewport Sizes
40
42
  $viewport-sm: 20rem;
@@ -1,6 +1,6 @@
1
- @import url('https://fonts.googleapis.com/css?family=Asap:400,400i,500,600,700&display=swap');
1
+ @import url("https://fonts.googleapis.com/css?family=Asap:400,400i,500,600,700&display=swap");
2
2
 
3
- @import '_variables';
3
+ @import "_variables";
4
4
 
5
5
  /* icon font path, required */
6
6
  $--color-primary: $app-primary-color !default;