diff --git a/index.html b/index.html
index 0f2d33e..b581e5e 100644
--- a/index.html
+++ b/index.html
@@ -210,6 +210,9 @@
cursor: default;
}
body {
+ --omeRed: #df283f;
+ --omeGreen: #128669;
+ --omeLinkBlue: #1d8dcd;
padding: 0;
font-family: "Overpass", -apple-system, BlinkMacSystemFont, "Segoe UI",
Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
@@ -230,7 +233,7 @@
background: white;
margin: 10px 0;
text-align: center;
- box-shadow: 10px 10px 20px rgba(125, 22, 2, 0.5);
+ box-shadow: 10px 10px 20px rgba(212, 239, 253, 0.5);
width: 100%;
position: relative;
}
diff --git a/package-lock.json b/package-lock.json
index 981019f..43a26bf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,9 +9,10 @@
"version": "0.3.0",
"dependencies": {
"ajv": "^8.11.0",
+ "ndarray": "^1.0.19",
"svelte-icons-pack": "^1.4.6",
"svelte-simple-modal": "^1.4.1",
- "zarr": "^0.6.0"
+ "zarrita": "^0.4.0-next.15"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.30",
@@ -59,6 +60,40 @@
}
}
},
+ "node_modules/@zarrita/core": {
+ "version": "0.1.0-next.13",
+ "resolved": "https://registry.npmjs.org/@zarrita/core/-/core-0.1.0-next.13.tgz",
+ "integrity": "sha512-aoGq1mS3SAfDhmMVtCQAcgNeD4O2SKbCqFmJ/hyAeHoCpAwOWpc+6grpKqMtuVNQdFtRl+r4pt7UQPZgsxdIrQ==",
+ "dependencies": {
+ "@zarrita/storage": "^0.1.0-next.5",
+ "@zarrita/typedarray": "^0.1.0-next.3",
+ "numcodecs": "^0.3.1"
+ }
+ },
+ "node_modules/@zarrita/indexing": {
+ "version": "0.1.0-next.15",
+ "resolved": "https://registry.npmjs.org/@zarrita/indexing/-/indexing-0.1.0-next.15.tgz",
+ "integrity": "sha512-1WAHDZvWYq0bnMquwWbCsKnx1rsuvDNcgersD5e6tNMpYnqPRUZUyOFpYaxBhrvJjEf5AM9CI3uCPE8RGYg7ag==",
+ "dependencies": {
+ "@zarrita/core": "^0.1.0-next.13",
+ "@zarrita/storage": "^0.1.0-next.5",
+ "@zarrita/typedarray": "^0.1.0-next.3"
+ }
+ },
+ "node_modules/@zarrita/storage": {
+ "version": "0.1.0-next.5",
+ "resolved": "https://registry.npmjs.org/@zarrita/storage/-/storage-0.1.0-next.5.tgz",
+ "integrity": "sha512-E1VSxhNGZHL4RsKfIuyaz0HRsDk7hOU8Y7R+8yvKolaHDjK31XQsUgu97oaR24qS1j1OOg5vGyFyd+y0q7FNOA==",
+ "dependencies": {
+ "reference-spec-reader": "^0.2.0",
+ "unzipit": "^1.4.3"
+ }
+ },
+ "node_modules/@zarrita/typedarray": {
+ "version": "0.1.0-next.3",
+ "resolved": "https://registry.npmjs.org/@zarrita/typedarray/-/typedarray-0.1.0-next.3.tgz",
+ "integrity": "sha512-DpSaU3Cr6HmYDC/v8oM+e219cHU/kzKma309Z9E+QbpRnZycKNbSTKcxFR7FqB6HgB9640gzNUVFG5P+wzX5Xg=="
+ },
"node_modules/ajv": {
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
@@ -461,16 +496,16 @@
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true
},
- "node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
+ "node_modules/fflate": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
+ "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
+ },
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
@@ -503,6 +538,16 @@
"node": ">= 0.4.0"
}
},
+ "node_modules/iota-array": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
+ "integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA=="
+ },
+ "node_modules/is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
"node_modules/is-core-module": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
@@ -559,38 +604,21 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
- "node_modules/numcodecs": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/numcodecs/-/numcodecs-0.2.2.tgz",
- "integrity": "sha512-Y5K8mv80yb4MgVpcElBkUeMZqeE4TrovxRit/dTZvoRl6YkB6WEjY+fiUjGCblITnt3T3fmrDg8yRWu0gOLjhQ==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/p-queue": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.3.0.tgz",
- "integrity": "sha512-5fP+yVQ0qp0rEfZoDTlP2c3RYBgxvRsw30qO+VtPPc95lyvSG+x6USSh1TuLB4n96IO6I8/oXQGsTgtna4q2nQ==",
+ "node_modules/ndarray": {
+ "version": "1.0.19",
+ "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz",
+ "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==",
"dependencies": {
- "eventemitter3": "^4.0.7",
- "p-timeout": "^5.0.2"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "iota-array": "^1.0.0",
+ "is-buffer": "^1.0.2"
}
},
- "node_modules/p-timeout": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz",
- "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node_modules/numcodecs": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/numcodecs/-/numcodecs-0.3.2.tgz",
+ "integrity": "sha512-6YSPnmZgg0P87jnNhi3s+FVLOcIn3y+1CTIgUulA3IdASzK9fJM87sUFkpyA+be9GibGRaST2wCgkD+6U+fWKw==",
+ "dependencies": {
+ "fflate": "^0.8.0"
}
},
"node_modules/path-parse": {
@@ -649,6 +677,11 @@
"node": ">=6"
}
},
+ "node_modules/reference-spec-reader": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/reference-spec-reader/-/reference-spec-reader-0.2.0.tgz",
+ "integrity": "sha512-q0mfCi5yZSSHXpCyxjgQeaORq3tvDsxDyzaadA/5+AbAUwRyRuuTh0aRQuE/vAOt/qzzxidJ5iDeu1cLHaNBlQ=="
+ },
"node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
@@ -749,6 +782,17 @@
"svelte": "^3.31.2"
}
},
+ "node_modules/unzipit": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/unzipit/-/unzipit-1.4.3.tgz",
+ "integrity": "sha512-gsq2PdJIWWGhx5kcdWStvNWit9FVdTewm4SEG7gFskWs+XCVaULt9+BwuoBtJiRE8eo3L1IPAOrbByNLtLtIlg==",
+ "dependencies": {
+ "uzip-module": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -757,6 +801,11 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/uzip-module": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/uzip-module/-/uzip-module-1.0.3.tgz",
+ "integrity": "sha512-AMqwWZaknLM77G+VPYNZLEruMGWGzyigPK3/Whg99B3S6vGHuqsyl5ZrOv1UUF3paGK1U6PM0cnayioaryg/fA=="
+ },
"node_modules/vite": {
"version": "2.9.9",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.9.tgz",
@@ -794,16 +843,14 @@
}
}
},
- "node_modules/zarr": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/zarr/-/zarr-0.6.0.tgz",
- "integrity": "sha512-WgGe+aFyK6EmTyZcqJ2OFeFQ9fJFuJqeJgM5sKnbap7HJboaI+rBpDp0rPXSTq5ITu/rLEQjZQ2mPlcfYk7DYA==",
+ "node_modules/zarrita": {
+ "version": "0.4.0-next.15",
+ "resolved": "https://registry.npmjs.org/zarrita/-/zarrita-0.4.0-next.15.tgz",
+ "integrity": "sha512-s2ZElXObBqmsTZOkSMuamc1c05pc2Ar+OBlPndFPvzAcnx/G8cQoLe5Yo3mdqwTd7a28Lq/zrTvFc/Qbpj22VA==",
"dependencies": {
- "numcodecs": "^0.2.2",
- "p-queue": "^7.1.0"
- },
- "engines": {
- "node": ">=12"
+ "@zarrita/core": "^0.1.0-next.13",
+ "@zarrita/indexing": "^0.1.0-next.15",
+ "@zarrita/storage": "^0.1.0-next.5"
}
}
},
@@ -832,6 +879,40 @@
"svelte-hmr": "^0.14.11"
}
},
+ "@zarrita/core": {
+ "version": "0.1.0-next.13",
+ "resolved": "https://registry.npmjs.org/@zarrita/core/-/core-0.1.0-next.13.tgz",
+ "integrity": "sha512-aoGq1mS3SAfDhmMVtCQAcgNeD4O2SKbCqFmJ/hyAeHoCpAwOWpc+6grpKqMtuVNQdFtRl+r4pt7UQPZgsxdIrQ==",
+ "requires": {
+ "@zarrita/storage": "^0.1.0-next.5",
+ "@zarrita/typedarray": "^0.1.0-next.3",
+ "numcodecs": "^0.3.1"
+ }
+ },
+ "@zarrita/indexing": {
+ "version": "0.1.0-next.15",
+ "resolved": "https://registry.npmjs.org/@zarrita/indexing/-/indexing-0.1.0-next.15.tgz",
+ "integrity": "sha512-1WAHDZvWYq0bnMquwWbCsKnx1rsuvDNcgersD5e6tNMpYnqPRUZUyOFpYaxBhrvJjEf5AM9CI3uCPE8RGYg7ag==",
+ "requires": {
+ "@zarrita/core": "^0.1.0-next.13",
+ "@zarrita/storage": "^0.1.0-next.5",
+ "@zarrita/typedarray": "^0.1.0-next.3"
+ }
+ },
+ "@zarrita/storage": {
+ "version": "0.1.0-next.5",
+ "resolved": "https://registry.npmjs.org/@zarrita/storage/-/storage-0.1.0-next.5.tgz",
+ "integrity": "sha512-E1VSxhNGZHL4RsKfIuyaz0HRsDk7hOU8Y7R+8yvKolaHDjK31XQsUgu97oaR24qS1j1OOg5vGyFyd+y0q7FNOA==",
+ "requires": {
+ "reference-spec-reader": "^0.2.0",
+ "unzipit": "^1.4.3"
+ }
+ },
+ "@zarrita/typedarray": {
+ "version": "0.1.0-next.3",
+ "resolved": "https://registry.npmjs.org/@zarrita/typedarray/-/typedarray-0.1.0-next.3.tgz",
+ "integrity": "sha512-DpSaU3Cr6HmYDC/v8oM+e219cHU/kzKma309Z9E+QbpRnZycKNbSTKcxFR7FqB6HgB9640gzNUVFG5P+wzX5Xg=="
+ },
"ajv": {
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
@@ -1032,16 +1113,16 @@
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true
},
- "eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
- },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
+ "fflate": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
+ "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
+ },
"fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
@@ -1064,6 +1145,16 @@
"function-bind": "^1.1.1"
}
},
+ "iota-array": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
+ "integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA=="
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
"is-core-module": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
@@ -1105,24 +1196,22 @@
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"dev": true
},
- "numcodecs": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/numcodecs/-/numcodecs-0.2.2.tgz",
- "integrity": "sha512-Y5K8mv80yb4MgVpcElBkUeMZqeE4TrovxRit/dTZvoRl6YkB6WEjY+fiUjGCblITnt3T3fmrDg8yRWu0gOLjhQ=="
- },
- "p-queue": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.3.0.tgz",
- "integrity": "sha512-5fP+yVQ0qp0rEfZoDTlP2c3RYBgxvRsw30qO+VtPPc95lyvSG+x6USSh1TuLB4n96IO6I8/oXQGsTgtna4q2nQ==",
+ "ndarray": {
+ "version": "1.0.19",
+ "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz",
+ "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==",
"requires": {
- "eventemitter3": "^4.0.7",
- "p-timeout": "^5.0.2"
+ "iota-array": "^1.0.0",
+ "is-buffer": "^1.0.2"
}
},
- "p-timeout": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz",
- "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew=="
+ "numcodecs": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/numcodecs/-/numcodecs-0.3.2.tgz",
+ "integrity": "sha512-6YSPnmZgg0P87jnNhi3s+FVLOcIn3y+1CTIgUulA3IdASzK9fJM87sUFkpyA+be9GibGRaST2wCgkD+6U+fWKw==",
+ "requires": {
+ "fflate": "^0.8.0"
+ }
},
"path-parse": {
"version": "1.0.7",
@@ -1158,6 +1247,11 @@
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
+ "reference-spec-reader": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/reference-spec-reader/-/reference-spec-reader-0.2.0.tgz",
+ "integrity": "sha512-q0mfCi5yZSSHXpCyxjgQeaORq3tvDsxDyzaadA/5+AbAUwRyRuuTh0aRQuE/vAOt/qzzxidJ5iDeu1cLHaNBlQ=="
+ },
"require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
@@ -1224,6 +1318,14 @@
"integrity": "sha512-em/uxH1xvQZoXTOq81Kk0u9ltjf/EyQkNiKTQJQmdCygDMqyUfMCFzLnbIQ4ApfV4BcRh6eYbwbCeeWTOyfpsg==",
"requires": {}
},
+ "unzipit": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/unzipit/-/unzipit-1.4.3.tgz",
+ "integrity": "sha512-gsq2PdJIWWGhx5kcdWStvNWit9FVdTewm4SEG7gFskWs+XCVaULt9+BwuoBtJiRE8eo3L1IPAOrbByNLtLtIlg==",
+ "requires": {
+ "uzip-module": "^1.0.2"
+ }
+ },
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -1232,6 +1334,11 @@
"punycode": "^2.1.0"
}
},
+ "uzip-module": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/uzip-module/-/uzip-module-1.0.3.tgz",
+ "integrity": "sha512-AMqwWZaknLM77G+VPYNZLEruMGWGzyigPK3/Whg99B3S6vGHuqsyl5ZrOv1UUF3paGK1U6PM0cnayioaryg/fA=="
+ },
"vite": {
"version": "2.9.9",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.9.tgz",
@@ -1245,13 +1352,14 @@
"rollup": "^2.59.0"
}
},
- "zarr": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/zarr/-/zarr-0.6.0.tgz",
- "integrity": "sha512-WgGe+aFyK6EmTyZcqJ2OFeFQ9fJFuJqeJgM5sKnbap7HJboaI+rBpDp0rPXSTq5ITu/rLEQjZQ2mPlcfYk7DYA==",
+ "zarrita": {
+ "version": "0.4.0-next.15",
+ "resolved": "https://registry.npmjs.org/zarrita/-/zarrita-0.4.0-next.15.tgz",
+ "integrity": "sha512-s2ZElXObBqmsTZOkSMuamc1c05pc2Ar+OBlPndFPvzAcnx/G8cQoLe5Yo3mdqwTd7a28Lq/zrTvFc/Qbpj22VA==",
"requires": {
- "numcodecs": "^0.2.2",
- "p-queue": "^7.1.0"
+ "@zarrita/core": "^0.1.0-next.13",
+ "@zarrita/indexing": "^0.1.0-next.15",
+ "@zarrita/storage": "^0.1.0-next.5"
}
}
}
diff --git a/package.json b/package.json
index f66b677..e88da54 100644
--- a/package.json
+++ b/package.json
@@ -15,8 +15,9 @@
},
"dependencies": {
"ajv": "^8.11.0",
+ "ndarray": "^1.0.19",
"svelte-icons-pack": "^1.4.6",
"svelte-simple-modal": "^1.4.1",
- "zarr": "^0.6.0"
+ "zarrita": "^0.4.0-next.15"
}
}
diff --git a/public/ome-main-nav.svg b/public/ome-main-nav.svg
new file mode 100644
index 0000000..78c5f52
--- /dev/null
+++ b/public/ome-main-nav.svg
@@ -0,0 +1,43 @@
+
+
+
diff --git a/src/App.svelte b/src/App.svelte
index a62e5dd..b959e10 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -6,7 +6,7 @@
import Modal from "svelte-simple-modal";
import SplashScreen from "./SplashScreen.svelte";
- import { getJson } from "./utils";
+ import { getZarrGroupAttrs } from "./utils";
import CheckMark from "./CheckMark.svelte";
const searchParams = new URLSearchParams(window.location.search);
@@ -15,14 +15,17 @@
source = source.slice(0, -1);
}
- let location = window.location.href;
-
let promise;
if (source) {
// load JSON to be validated...
- console.log("Loading JSON... " + source + "/.zattrs");
- promise = getJson(source + "/.zattrs");
+ console.log("Loading JSON... " + source);
+ promise = getZarrGroupAttrs(source);
+ }
+
+ function isBioFormats2Raw(data) {
+ let omeAttrs = data?.attributes?.ome || data;
+ return omeAttrs["bioformats2raw.layout"] === 3 && !omeAttrs.plate;
}
@@ -38,7 +41,7 @@
{:then data}
- {#if data["bioformats2raw.layout"] === 3 && !data.plate}
+ {#if isBioFormats2Raw(data)}
{:else}
@@ -74,24 +77,7 @@
width: 100%;
flex: 1;
padding: 15px 0;
- background: #ff512f; /* fallback for old browsers */
- background: -webkit-linear-gradient(
- to right,
- #f09819,
- #ff512f
- ); /* Chrome 10-25, Safari 5.1-6 */
- background: linear-gradient(
- to right,
- #f09819,
- #ff512f
- ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
- /* https://uigradients.com/ */
- /* OME green->blue rgb(61,132,107), rgb(68,139,200) */
- }
-
- article {
- width: 90%;
- margin: auto;
+ background: white;
}
section > div {
@@ -108,14 +94,6 @@
section > div {
flex-direction: row;
}
-
- article {
- width: 60%;
- margin: auto;
- }
- a {
- white-space: nowrap;
- }
}
.error {
diff --git a/src/Bioformats2rawLayout/index.svelte b/src/Bioformats2rawLayout/index.svelte
index c31967c..82ab370 100644
--- a/src/Bioformats2rawLayout/index.svelte
+++ b/src/Bioformats2rawLayout/index.svelte
@@ -1,27 +1,83 @@
- Reading: /{zarrName}/.zattrs
-
-
-
-
+ Reading: /{zarrName}/{zarrAttrsFileName}
Loading metadata:{metadataName}
@@ -65,20 +117,28 @@
loading {metadataUrl}...
{:then metadataJson}
- Images
+ {metadataJson.images.length} Images
{#await preloadSchema(source + "/0")}
loading schema...
{:then ok}
@@ -87,10 +147,15 @@
{/await}
+ {zarrName}/{zarrAttrsFileName}
+
+
+
+
{#if metadataJson.errors}
-
Error parsing {metadataName}
+
Error loading series metadata:
{#each metadataJson.errors as err, i}
{err}
{/each}
@@ -99,16 +164,20 @@
{:catch error}
{error.message}
{/await}
+
+
+ {#if !["0.1", "0.2", "0.3", "0.4"].includes(version)}
+
+ {/if}
diff --git a/src/JsonValidator/Labels/LabelsInfoLink.svelte b/src/JsonValidator/Labels/LabelsInfoLink.svelte
index 5f882be..f1a76b2 100644
--- a/src/JsonValidator/Labels/LabelsInfoLink.svelte
+++ b/src/JsonValidator/Labels/LabelsInfoLink.svelte
@@ -1,11 +1,14 @@
@@ -19,11 +22,11 @@
{/each}
{:else}
-
labels/.zattrs has no 'labels' list
+
labels/{zarrAttrsFileName} has no 'labels' list
{/if}
- labels/.zattrs
+ labels/{zarrAttrsFileName}
{JSON.stringify(labelsAttrs, null, 2)}
@@ -49,6 +52,6 @@
}
a,
a:visited {
- color: #ff512f;
+ color: var(--omeLinkBlue);
}
-
\ No newline at end of file
+
diff --git a/src/JsonValidator/MultiscaleArrays/Multiscale.svelte b/src/JsonValidator/MultiscaleArrays/Multiscale.svelte
index 7ddbeef..b13d6af 100644
--- a/src/JsonValidator/MultiscaleArrays/Multiscale.svelte
+++ b/src/JsonValidator/MultiscaleArrays/Multiscale.svelte
@@ -1,5 +1,5 @@
-
+
@@ -57,7 +71,7 @@
diff --git a/src/JsonValidator/MultiscaleArrays/index.svelte b/src/JsonValidator/MultiscaleArrays/index.svelte
index 1ba56cf..d654097 100644
--- a/src/JsonValidator/MultiscaleArrays/index.svelte
+++ b/src/JsonValidator/MultiscaleArrays/index.svelte
@@ -1,9 +1,13 @@
{#each rootAttrs.multiscales as multiscale, idx}
@@ -11,7 +15,7 @@
Multiscale {idx}
{#each multiscale.datasets as dataset}
-
+
{/each}
{/each}
diff --git a/src/JsonValidator/OpenWithViewers/index.svelte b/src/JsonValidator/OpenWithViewers/index.svelte
index 02ef655..3655c0d 100644
--- a/src/JsonValidator/OpenWithViewers/index.svelte
+++ b/src/JsonValidator/OpenWithViewers/index.svelte
@@ -7,6 +7,7 @@
export let source;
export let dtype;
+ export let version;
let viewers = viewers_json.viewers.map((viewer_data) => {
let href = viewer_data.href;
@@ -22,6 +23,11 @@
return {...viewer_data, href, logo_path}
});
+ if (version == "0.5") {
+ // TODO: update when other viewers support zarr v3
+ viewers = viewers.filter((viewer) => viewer.name == "vizarr");
+ }
+
@@ -86,7 +92,7 @@
a,
a:visited {
- color: #ff512f;
+ color: var(--omeLinkBlue);
}
.viewer_icon {
diff --git a/src/JsonValidator/Plate/WellContainer/PlateWell.svelte b/src/JsonValidator/Plate/WellContainer/PlateWell.svelte
index 8c64c3c..4822f5e 100644
--- a/src/JsonValidator/Plate/WellContainer/PlateWell.svelte
+++ b/src/JsonValidator/Plate/WellContainer/PlateWell.svelte
@@ -1,10 +1,14 @@
{#await promise}
diff --git a/src/JsonValidator/Plate/index.svelte b/src/JsonValidator/Plate/index.svelte
index ad25c38..381275d 100644
--- a/src/JsonValidator/Plate/index.svelte
+++ b/src/JsonValidator/Plate/index.svelte
@@ -1,5 +1,5 @@
+
+
+
+ {#each report as {name, value, level}}
+ -
+ {name}:
+ {#if value}
+ {@html warningSymbols.OK }
+ {#if value.startsWith("http")}
+ {value}
+ {:else}
+ {value}
+ {/if}
+ {:else}
+ {@html warningSymbols[level] } Not found
+ {/if}
+
+ {/each}
+ -
+ Organism:
+ {#if organismId}
+ {@html warningSymbols.OK }
+
+ {organismId}
+
+ {organismName}
+
+ {:else}
+ {@html warningSymbols.SUGGESTED } Not found
+ {/if}
+
+
+ -
+ Imaging method:
+ {#if fbbiId}
+ {@html warningSymbols.OK }
+
+ {fbbiId}
+
+ {imagingMethod}
+ {:else}
+ {@html warningSymbols.SUGGESTED } Not found
+ {/if}
+
+
+
+
+
diff --git a/src/JsonValidator/RoCrate/index.svelte b/src/JsonValidator/RoCrate/index.svelte
new file mode 100644
index 0000000..00fa08f
--- /dev/null
+++ b/src/JsonValidator/RoCrate/index.svelte
@@ -0,0 +1,40 @@
+
+
+
+
+
RO-Crate metadata
+
+
+
+{#await promise}
+
Loading ro-crate-metadata.json...
+{:then jsonData}
+ {#if jsonData}
+
+
+ {/if}
+{:catch error}
+
No ro-crate-metadata.json found
+{/await}
+
+
+
+
+
diff --git a/src/JsonValidator/Well/ImageContainer.svelte b/src/JsonValidator/Well/ImageContainer.svelte
index dbfbfdd..6bb8ab8 100644
--- a/src/JsonValidator/Well/ImageContainer.svelte
+++ b/src/JsonValidator/Well/ImageContainer.svelte
@@ -1,5 +1,5 @@
diff --git a/src/JsonValidator/index.svelte b/src/JsonValidator/index.svelte
index de70a83..5ac4fd2 100644
--- a/src/JsonValidator/index.svelte
+++ b/src/JsonValidator/index.svelte
@@ -1,6 +1,7 @@
- Validating: /{zarrName}/.zattrs
+ Validating: /{zarrName}/{zarrAttrsFileName}
- {#if !msVersion}No version found. Using {CURRENT_VERSION}
{/if}
+ {versionMessage}
Using schema{schemaUrls.length > 1 ? "s" : ""}:
{#each schemaUrls as url, i}
{i > 0 ? " and " : ""}
- {url.split("main")[1]}
+ {url.split("ngff")[1]}
{/each}
{#await promise}
@@ -62,33 +91,38 @@
{error.message}
{/await}
-
+
-
+
+
+ {#if !["0.1", "0.2", "0.3", "0.4"].includes(version)}
+
+ {/if}
+
{#await labelsPromise}
checking for labels...
{:then labelsAttrs}
-
+
{:catch error}
{/await}
-{#if rootAttrs.multiscales}
-
-{:else if rootAttrs.plate}
-
-{:else if rootAttrs.well}
-
+{#if omeAttrs.multiscales}
+
+{:else if omeAttrs.plate}
+
+{:else if omeAttrs.well}
+
{/if}