From c15f5a0da760d7ba7b8cc9474da1808c6d134410 Mon Sep 17 00:00:00 2001 From: Darren Zal Date: Wed, 1 Feb 2023 14:58:36 -0800 Subject: [PATCH] start visualization with cytoscape --- package-lock.json | 45 ++++ package.json | 4 +- src/components/explore/Explore.svelte | 223 ++++++++++++++++++ src/components/explore/data.json | 92 ++++++++ src/components/nav/SidebarNav.svelte | 5 + src/routes/explore/+page.svelte | 7 + .../components/icons/FileUploadIcon.svelte | 9 + .../components/imageGallery/ImageCard.svelte | 24 ++ .../imageGallery/ImageGallery.svelte | 184 +++++++++++++++ .../components/imageGallery/ImageModal.svelte | 162 +++++++++++++ .../imageGallery/MyseeliaPublic.svelte | 72 ++++++ .../explore/components/upload/Dropzone.svelte | 69 ++++++ .../components/upload/FileUploadCard.svelte | 40 ++++ src/routes/explore/data.json | 92 ++++++++ src/routes/explore/lib/gallery.ts | 209 ++++++++++++++++ tsconfig.json | 9 +- 16 files changed, 1243 insertions(+), 3 deletions(-) create mode 100644 src/components/explore/Explore.svelte create mode 100644 src/components/explore/data.json create mode 100644 src/routes/explore/+page.svelte create mode 100644 src/routes/explore/components/icons/FileUploadIcon.svelte create mode 100644 src/routes/explore/components/imageGallery/ImageCard.svelte create mode 100644 src/routes/explore/components/imageGallery/ImageGallery.svelte create mode 100644 src/routes/explore/components/imageGallery/ImageModal.svelte create mode 100644 src/routes/explore/components/imageGallery/MyseeliaPublic.svelte create mode 100644 src/routes/explore/components/upload/Dropzone.svelte create mode 100644 src/routes/explore/components/upload/FileUploadCard.svelte create mode 100644 src/routes/explore/data.json create mode 100644 src/routes/explore/lib/gallery.ts diff --git a/package-lock.json b/package-lock.json index 54e488c..76ff3d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "clipboard-copy": "^4.0.1", + "cytoscape": "^3.23.0", "qrcode-svg": "^1.1.0", "uint8arrays": "^3.1.0", "webnative": "^0.34.1" @@ -18,6 +19,7 @@ "@sveltejs/kit": "1.0.0-next.489", "@tailwindcss/typography": "^0.5.2", "@terminusdb/terminusdb-client": "^10.0.25", + "@types/cytoscape": "^3.19.9", "@types/qrcode-svg": "^1.1.1", "@typescript-eslint/eslint-plugin": "^4.33.0", "@typescript-eslint/parser": "^4.33.0", @@ -1663,6 +1665,12 @@ "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==", "dev": true }, + "node_modules/@types/cytoscape": { + "version": "3.19.9", + "resolved": "https://registry.npmjs.org/@types/cytoscape/-/cytoscape-3.19.9.tgz", + "integrity": "sha512-oqCx0ZGiBO0UESbjgq052vjDAy2X53lZpMrWqiweMpvVwKw/2IiYDdzPFK6+f4tMfdv9YKEM9raO5bAZc3UYBg==", + "dev": true + }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -3183,6 +3191,18 @@ "node": ">=0.10.0" } }, + "node_modules/cytoscape": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.23.0.tgz", + "integrity": "sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA==", + "dependencies": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/daisyui": { "version": "2.19.0", "integrity": "sha512-lLOz4cHm3xpm0AfdFojDFrhiDu4hZTdEbcVJri+KzQn1HvxmZS4STVujn8tV4RQXjchGdnIsXFqxd6F7rVZBiA==", @@ -4572,6 +4592,11 @@ "node": ">=8" } }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -10250,6 +10275,12 @@ "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==", "dev": true }, + "@types/cytoscape": { + "version": "3.19.9", + "resolved": "https://registry.npmjs.org/@types/cytoscape/-/cytoscape-3.19.9.tgz", + "integrity": "sha512-oqCx0ZGiBO0UESbjgq052vjDAy2X53lZpMrWqiweMpvVwKw/2IiYDdzPFK6+f4tMfdv9YKEM9raO5bAZc3UYBg==", + "dev": true + }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -11298,6 +11329,15 @@ "array-find-index": "^1.0.1" } }, + "cytoscape": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.23.0.tgz", + "integrity": "sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA==", + "requires": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + } + }, "daisyui": { "version": "2.19.0", "integrity": "sha512-lLOz4cHm3xpm0AfdFojDFrhiDu4hZTdEbcVJri+KzQn1HvxmZS4STVujn8tV4RQXjchGdnIsXFqxd6F7rVZBiA==", @@ -12221,6 +12261,11 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", diff --git a/package.json b/package.json index b4537a1..a652036 100644 --- a/package.json +++ b/package.json @@ -12,10 +12,11 @@ "format": "prettier --write --plugin-search-dir=. ." }, "devDependencies": { - "@terminusdb/terminusdb-client": "^10.0.25", "@sveltejs/adapter-static": "1.0.0-next.43", "@sveltejs/kit": "1.0.0-next.489", "@tailwindcss/typography": "^0.5.2", + "@terminusdb/terminusdb-client": "^10.0.25", + "@types/cytoscape": "^3.19.9", "@types/qrcode-svg": "^1.1.1", "@typescript-eslint/eslint-plugin": "^4.33.0", "@typescript-eslint/parser": "^4.33.0", @@ -55,6 +56,7 @@ }, "dependencies": { "clipboard-copy": "^4.0.1", + "cytoscape": "^3.23.0", "qrcode-svg": "^1.1.0", "uint8arrays": "^3.1.0", "webnative": "^0.34.1" diff --git a/src/components/explore/Explore.svelte b/src/components/explore/Explore.svelte new file mode 100644 index 0000000..5675b08 --- /dev/null +++ b/src/components/explore/Explore.svelte @@ -0,0 +1,223 @@ + + + + + +
+
+ +
+ +
+ +
+ + + + diff --git a/src/components/explore/data.json b/src/components/explore/data.json new file mode 100644 index 0000000..85b7d15 --- /dev/null +++ b/src/components/explore/data.json @@ -0,0 +1,92 @@ +{ + "entities": [{ + "label": "Organization", + "title": "Neuralink" + }, { + "label": "Organization", + "title": "SpaceX" + }, { + "label": "Organization", + "title": "Pretoria" + }, { + "label": "Organization", + "title": "The Boring Company" + }, { + "label": "Organization", + "title": "University of Pretoria" + }, { + "label": "Organization", + "title": "Stanford University" + }, { + "label": "Person", + "title": "Jeff Bezos" + }, { + "label": "Organization", + "title": "University of Pennsylvania" + }, { + "label": "Person", + "title": "Kimbal Musk" + }, { + "label": "Organization", + "title": "Tesla, Inc." + }, { + "label": "Person", + "title": "Elon Musk" + }], + "relations": [{ + "source": "Elon Musk", + "target": "Neuralink" + }, { + "source": "Tesla, Inc.", + "target": "Elon Musk", + "type": "owned by" + }, { + "source": "Elon Musk", + "target": "University of Pennsylvania", + "type": "residence" + }, { + "source": "Elon Musk", + "target": "Tesla, Inc.", + "type": "owned by" + }, { + "source": "The Boring Company", + "target": "Tesla, Inc.", + "type": "owned by" + }, { + "source": "Elon Musk", + "target": "Kimbal Musk", + "type": "sibling" + }, { + "source": "University of Pennsylvania", + "target": "Elon Musk", + "type": "residence" + }, { + "source": "The Boring Company", + "target": "Neuralink", + "type": "subsidiary" + }, { + "source": "Elon Musk", + "target": "University of Pretoria", + "type": "work location" + }, { + "source": "The Boring Company", + "target": "Elon Musk", + "type": "owned by" + }, { + "source": "Kimbal Musk", + "target": "Elon Musk", + "type": "sibling" + }, { + "source": "Neuralink", + "target": "Elon Musk", + "type": "owned by" + }, { + "source": "Elon Musk", + "target": "The Boring Company", + "type": "owned by" + }, { + "source": "Elon Musk", + "target": "University of Pennsylvania", + "type": "work location" + }] +} \ No newline at end of file diff --git a/src/components/nav/SidebarNav.svelte b/src/components/nav/SidebarNav.svelte index e74f45d..2782eac 100644 --- a/src/components/nav/SidebarNav.svelte +++ b/src/components/nav/SidebarNav.svelte @@ -20,6 +20,11 @@ href: '/gallery/', icon: PhotoGallery }, + { + label: 'Explore', + href: '/explore/', + icon: PhotoGallery + }, { label: 'About This Template', href: '/about/', diff --git a/src/routes/explore/+page.svelte b/src/routes/explore/+page.svelte new file mode 100644 index 0000000..e0cf4bf --- /dev/null +++ b/src/routes/explore/+page.svelte @@ -0,0 +1,7 @@ + + + + + diff --git a/src/routes/explore/components/icons/FileUploadIcon.svelte b/src/routes/explore/components/icons/FileUploadIcon.svelte new file mode 100644 index 0000000..afc4085 --- /dev/null +++ b/src/routes/explore/components/icons/FileUploadIcon.svelte @@ -0,0 +1,9 @@ + + + diff --git a/src/routes/explore/components/imageGallery/ImageCard.svelte b/src/routes/explore/components/imageGallery/ImageCard.svelte new file mode 100644 index 0000000..2fa81c5 --- /dev/null +++ b/src/routes/explore/components/imageGallery/ImageCard.svelte @@ -0,0 +1,24 @@ + + +
+
+
+ {`Gallery +
+
diff --git a/src/routes/explore/components/imageGallery/ImageGallery.svelte b/src/routes/explore/components/imageGallery/ImageGallery.svelte new file mode 100644 index 0000000..f9a235d --- /dev/null +++ b/src/routes/explore/components/imageGallery/ImageGallery.svelte @@ -0,0 +1,184 @@ + + + + +
+
+
+ {#each $galleryStore.selectedArea === AREAS.PRIVATE ? $galleryStore.privateImages : $galleryStore.publicImages as image}{/each} +
+
+ +
+ +
+ +
+ +
+ +
+ +
+
+ + {#if selectedImage} + + {/if} +
diff --git a/src/routes/explore/components/imageGallery/ImageModal.svelte b/src/routes/explore/components/imageGallery/ImageModal.svelte new file mode 100644 index 0000000..5c4f17a --- /dev/null +++ b/src/routes/explore/components/imageGallery/ImageModal.svelte @@ -0,0 +1,162 @@ + + + + +{#if !!image} + + + +{/if} diff --git a/src/routes/explore/components/imageGallery/MyseeliaPublic.svelte b/src/routes/explore/components/imageGallery/MyseeliaPublic.svelte new file mode 100644 index 0000000..55a3366 --- /dev/null +++ b/src/routes/explore/components/imageGallery/MyseeliaPublic.svelte @@ -0,0 +1,72 @@ + + + + +
+
+
+ + {#each $galleryStore.selectedArea === AREAS.PRIVATE ? $galleryStore.privateImages : $galleryStore.publicImages as image} + + {/each} +
+
+ + {#if selectedImage} + + {/if} +
\ No newline at end of file diff --git a/src/routes/explore/components/upload/Dropzone.svelte b/src/routes/explore/components/upload/Dropzone.svelte new file mode 100644 index 0000000..b4b4e3c --- /dev/null +++ b/src/routes/explore/components/upload/Dropzone.svelte @@ -0,0 +1,69 @@ + + + diff --git a/src/routes/explore/components/upload/FileUploadCard.svelte b/src/routes/explore/components/upload/FileUploadCard.svelte new file mode 100644 index 0000000..b23ae44 --- /dev/null +++ b/src/routes/explore/components/upload/FileUploadCard.svelte @@ -0,0 +1,40 @@ + + +