From 04a379ae58fb86eb0f68ab8c850557b55ef4ecec Mon Sep 17 00:00:00 2001 From: Spencer Flagg Date: Wed, 13 Sep 2023 16:28:28 +0200 Subject: [PATCH] v0.1.0 --- README.md | 40 +- package-lock.json | 347 +++++++++++- package.json | 7 +- src/ConnectedWidget.svelte | 944 +++++++++++++++++++++------------ src/ConnectedWidget2.svelte | 480 ----------------- src/KeyPrompt.svelte | 20 +- src/MetaData.svelte | 119 +++-- src/NostrNote.svelte | 492 ++++++++++------- src/NostrNote2.svelte | 325 ------------ src/app.css | 187 ++++++- src/lib/README.md | 80 +++ src/lightning.svg | 16 + src/routes/+page.svelte | 808 ++++++++++++++-------------- src/routes/about/+page.svelte | 60 +++ src/routes/demo/+page.svelte | 24 - src/routes/draft1/+page.svelte | 254 --------- src/routes/draft2/+page.svelte | 235 -------- src/routes/figma/+page.svelte | 123 ----- svelte.config.js | 3 +- vite.config.js | 22 +- 20 files changed, 2111 insertions(+), 2475 deletions(-) delete mode 100644 src/ConnectedWidget2.svelte delete mode 100644 src/NostrNote2.svelte create mode 100644 src/lib/README.md create mode 100644 src/lightning.svg create mode 100644 src/routes/about/+page.svelte delete mode 100644 src/routes/demo/+page.svelte delete mode 100644 src/routes/draft1/+page.svelte delete mode 100644 src/routes/draft2/+page.svelte delete mode 100644 src/routes/figma/+page.svelte diff --git a/README.md b/README.md index bcb8701..825962a 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,25 @@ -# What is NostriChat? -Nostri.chat is a chat widget you can easily embed in websites. +# What is DiSseNT? -It uses Nostr as the underlying protocol, which permits a few pretty cool features. +DiSseNT is my attempt at ressurecting a valuable [project](https://github.com/gab-ai-inc/gab-dissenter-extension/issues/117) to enable truely trustless and free commentary on the web. DiSseNT is a web app built on [NOSTR](https://github.com/nostr-protocol/nostr), and based on [Nostri.chat](https://github.com/pablof7z/nostr-chat-widget), that associates a set of NOSTR messages with a given URL. -## Operation Modes -### Classic chat: 1-to-1 encrypted chats -This mode implements the typical chat widget flow present in most websites. The visitor writes in the website and someone associated with the website responds. +# How do I use it? +1. Type or paste a url -No one else sees this communication +# Roadmap +- [x] basic posting, associated with a url +- [x] display meta info +- [ ] sort comments +- [ ] zap comments +- [ ] search comments +- [ ] filter comments +- [ ] chromium extension +- [ ] dark mode +- [ ] social media specific urls +- [ ] relay picker +- [ ] show dsnt'd urls -### Global chat: Topic/Website-based communication -In this mode, the user engages in a conversation around a topic and everybody connected to the same relays can see the communication happening and interact with it. +# Supporting the Roadmap -The communication can be scoped to one or multiple topics. (e.g. _#fasting_, _#bitcoin_, or your specific website). +Buy Me a Coffee at ko-fi.com -When a visitor interacts with this mode, the chat widget is populated with the prior conversations that have already occurred around this topic. - -> Imagine visiting a website about #fasting, and you can immediately interact with anyone interested in that topic; you can ask questions and receive immediate responses from others - -# Features -- [x] NostrConnect key delegation -- [x] Ephemeral keys -- [x] Encrypted DMs mode -- [x] Tag-scoped chats mode -- [x] In-thread replies -- [ ] Root-replies mode: similar to global (publicly available) but visitor doesn't see any past history and only sees in-thread replies to the OP +Donate using Liberapay \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d19c6a5..6af602b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "dnst", - "version": "0.3.14159", + "name": "dsnt", + "version": "0.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "dsnt", - "version": "0.3.14159", + "version": "0.1.0", "dependencies": { "@nostr-connect/connect": "^0.2.3", "@nostr-dev-kit/ndk": "^0.3.32", @@ -21,6 +21,7 @@ "emoji-regex": "^10.2.1", "eventemitter3": "^5.0.0", "light-bolt11-decoder": "^3.0.0", + "marked": "^9.0.0", "nostr": "^0.2.7", "nostr-dev-kit": "file:../../nostr/ndk/nostr-dev-kit", "nostr-tools": "^1.11.1", @@ -50,10 +51,12 @@ "rollup-plugin-svelte": "^7.1.5", "sirv-cli": "^2.0.2", "svelte": "^3.54.0", + "svelte-routing": "^2.3.0", "tailwindcss": "^3.3.2", "tslib": "^2.4.1", "typescript": "^4.9.3", - "vite": "^4.0.0" + "vite": "^4.0.0", + "vite-plugin-svelte-md": "^0.1.7" } }, "../../nostr/ndk/nostr-dev-kit": { @@ -3790,6 +3793,18 @@ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4194,6 +4209,56 @@ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -4539,6 +4604,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4880,6 +4954,15 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, "node_modules/livereload": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", @@ -5105,15 +5188,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-9.0.0.tgz", + "integrity": "sha512-37yoTpjU+TSXb9OBYY5n78z/CqXh76KiQj9xsKxEdztzU9fRLmbWO5YqKxgCVGKlNdexppnbKTkwB3RipVri8w==", "bin": { "marked": "bin/marked.js" }, "engines": { - "node": ">= 12" + "node": ">= 16" } }, "node_modules/mdn-data": { @@ -5121,6 +5232,12 @@ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -7379,6 +7496,19 @@ "rimraf": "^2.5.2" } }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/semiver": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", @@ -7587,6 +7717,12 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -7725,6 +7861,15 @@ "node": ">=4" } }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -7958,6 +8103,12 @@ "resolved": "https://registry.npmjs.org/svelte-qr/-/svelte-qr-1.0.0.tgz", "integrity": "sha512-7n/FPFhImPI68NCwChzYqzTbTpDhGCiFgGiCQY+IXS8sh0Xhzzd0wwQnN5n2BCJ0Uvti8s0RhKErwcw4Lp7RvQ==" }, + "node_modules/svelte-routing": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/svelte-routing/-/svelte-routing-2.3.0.tgz", + "integrity": "sha512-M4KY7YrJ9txzn1ssLUa0dfkAxg7IuNpYMMspm/KoQKh/pHMGpCTAMn1q+gSxyUZNGDX1pq12fF2VRUq4+gBfxA==", + "dev": true + }, "node_modules/svelte-scrollto": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/svelte-scrollto/-/svelte-scrollto-0.2.0.tgz", @@ -8343,6 +8494,17 @@ "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" } }, + "node_modules/typedoc/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/typedoc/node_modules/minimatch": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", @@ -8369,6 +8531,12 @@ "node": ">=4.2.0" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -8528,6 +8696,23 @@ } } }, + "node_modules/vite-plugin-svelte-md": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/vite-plugin-svelte-md/-/vite-plugin-svelte-md-0.1.7.tgz", + "integrity": "sha512-KtNqcuGyrr8EnTWxS+X9jCG6NnmONxYqoZJNr1VsLf+CKZrhykn+rpqxapcGr0g8KeDhYzrkkKASbQikCsQY4Q==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.0", + "gray-matter": "^4.0.3", + "markdown-it": "^13.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, "node_modules/vite/node_modules/rollup": { "version": "3.12.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.12.1.tgz", @@ -11187,6 +11372,15 @@ } } }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -11477,6 +11671,45 @@ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, + "gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -11709,6 +11942,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -11950,6 +12189,15 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, "livereload": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", @@ -12118,16 +12366,43 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" }, + "markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + } + } + }, "marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-9.0.0.tgz", + "integrity": "sha512-37yoTpjU+TSXb9OBYY5n78z/CqXh76KiQj9xsKxEdztzU9fRLmbWO5YqKxgCVGKlNdexppnbKTkwB3RipVri8w==" }, "mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -13685,6 +13960,16 @@ "rimraf": "^2.5.2" } }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + } + }, "semiver": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", @@ -13850,6 +14135,12 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -13953,6 +14244,12 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true + }, "strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -14082,6 +14379,12 @@ "resolved": "https://registry.npmjs.org/svelte-qr/-/svelte-qr-1.0.0.tgz", "integrity": "sha512-7n/FPFhImPI68NCwChzYqzTbTpDhGCiFgGiCQY+IXS8sh0Xhzzd0wwQnN5n2BCJ0Uvti8s0RhKErwcw4Lp7RvQ==" }, + "svelte-routing": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/svelte-routing/-/svelte-routing-2.3.0.tgz", + "integrity": "sha512-M4KY7YrJ9txzn1ssLUa0dfkAxg7IuNpYMMspm/KoQKh/pHMGpCTAMn1q+gSxyUZNGDX1pq12fF2VRUq4+gBfxA==", + "dev": true + }, "svelte-scrollto": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/svelte-scrollto/-/svelte-scrollto-0.2.0.tgz", @@ -14360,6 +14663,11 @@ "shiki": "^0.14.1" }, "dependencies": { + "marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==" + }, "minimatch": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", @@ -14375,6 +14683,12 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -14473,6 +14787,17 @@ } } }, + "vite-plugin-svelte-md": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/vite-plugin-svelte-md/-/vite-plugin-svelte-md-0.1.7.tgz", + "integrity": "sha512-KtNqcuGyrr8EnTWxS+X9jCG6NnmONxYqoZJNr1VsLf+CKZrhykn+rpqxapcGr0g8KeDhYzrkkKASbQikCsQY4Q==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.0", + "gray-matter": "^4.0.3", + "markdown-it": "^13.0.0" + } + }, "vitefu": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", diff --git a/package.json b/package.json index 86a5f1a..eecf73b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dsnt", - "version": "0.3.14159", + "version": "0.1.0", "scripts": { "dev": "vite dev", "build": "svelte-kit sync && svelte-package", @@ -18,10 +18,12 @@ "rollup-plugin-svelte": "^7.1.5", "sirv-cli": "^2.0.2", "svelte": "^3.54.0", + "svelte-routing": "^2.3.0", "tailwindcss": "^3.3.2", "tslib": "^2.4.1", "typescript": "^4.9.3", - "vite": "^4.0.0" + "vite": "^4.0.0", + "vite-plugin-svelte-md": "^0.1.7" }, "type": "module", "dependencies": { @@ -38,6 +40,7 @@ "emoji-regex": "^10.2.1", "eventemitter3": "^5.0.0", "light-bolt11-decoder": "^3.0.0", + "marked": "^9.0.0", "nostr": "^0.2.7", "nostr-dev-kit": "file:../../nostr/ndk/nostr-dev-kit", "nostr-tools": "^1.11.1", diff --git a/src/ConnectedWidget.svelte b/src/ConnectedWidget.svelte index e8c1023..76b7b54 100644 --- a/src/ConnectedWidget.svelte +++ b/src/ConnectedWidget.svelte @@ -1,377 +1,657 @@ -
+ +{#if $chatAdapter?.pubkey} +
+ +

+ {ownName} +

+ {ownName}'s avatar +
+
+ {/if} + {#if events} +
+

+ {events.length} comments +

+
+ {/if} + {#if totalRelays} +
+ +
+ {connectedRelays}/{totalRelays} relays +
+ {#each Array(totalRelays) as _, i} + + {/each} +
+
+
+ {/if} -
- {#if $chatAdapter?.pubkey} - {ownName} - {/if} -
+
+ - -
- \ No newline at end of file + + section.input { + display: flex; + } + + section.input textarea { + height: auto; + padding: 1rem; + flex-grow: 1; + } + + section.input button { + padding: 1rem; + } + + .events { + display: flex; + flex-direction: column; + } + + section.profile { + position: fixed; + top: 1rem; + right: 1rem; + } + + section.relays { + position: fixed; + bottom: 1rem; + right: 2rem; + } + + .toolbar__avatar{ + display: flex; + align-items: center; + justify-content: flex-end; + gap: 1rem; + color: var(--c-bright); + } + + .toolbar__avatar img{ + width: 2rem; + border-radius: 2rem; + outline: 1px solid var(--c-lines); + } + + section.stats { + display: flex; + justify-content: space-between; + align-items: flex-end; + } + + .stats__count{ + font-family: 'Barlow Condensed', sans-serif; + font-size: 55px; + font-weight: 100; + line-height: .8; + color: var(--c-lines); + } + + .relay-dots { + display: flex; + gap:.5rem; + } + + .relay{ + width: 11px; + height: 11px; + border-radius: 11px; + border: 1px solid var(--c-lines); + } + + .relay--active{ + border-color: var(--c-marker); + background-color: var(--c-marker); + } + + p { + margin: 0; + } + +section.input textarea{ + resize: none; + background-color: var(--c-lines); + border: none; +} + +section.input textarea::placeholder{ + color: var(--c-bright); +} + +section.input textarea:focus{ + outline: none; + background-color: var(--c-bright); +} + +section.input textarea:focus + button{ + border-color: var(--c-bright); +} + +section.input textarea:focus + button{ + --color: var(--c-bright); +} + +section.input textarea:focus + button svg path{ + stroke: var(--c-bright); +} + + .btn--comment { + --color: var(--c-lines); + padding: 1rem; + } + + .btn--comment:disabled { + cursor: not-allowed; + } + + .btn--comment:disabled svg path{ + fill:none; + stroke: var(--c-lines); + } + +.btn--comment svg{ + width: 3rem; + height: 3rem; +} + +.btn--comment svg path{ + fill: var(--color); +} + +.events--empty { + display: flex; + flex-direction: column; + align-items: center; + min-height: 100%; + justify-content: center; +} + +.events--empty svg{ + max-width: 50%; + height: auto; +} + +.events--empty svg path{ + fill: rgba(0,0,0,.3); +} + +.comments { + flex-grow: 1; +} + +.events { + min-height: 100%; +} + + +.stats__relays{ + display: flex; + flex-direction: column; + gap: .5rem; + align-items: end; + color: var(--c-lines); + } + + .btn.btn--scroll-to-top { + transition: all .3s; + transform: translateY(-3rem); + position: sticky; + top: 0; + left: 5rem; + /* z-index: 2; */ + background: var(--c-bright); + padding: 0.25em 0.75em; + /* display: inline-block; */ + align-self: center; + border-radius: 2rem; + font-size: 1.5rem; + color: black; + font-weight: 300; + text-decoration: none; + z-index: 1; + } + diff --git a/src/ConnectedWidget2.svelte b/src/ConnectedWidget2.svelte deleted file mode 100644 index ac1be6a..0000000 --- a/src/ConnectedWidget2.svelte +++ /dev/null @@ -1,480 +0,0 @@ - - - -
- {#if $chatAdapter?.pubkey} - -

- {ownName} -

- {ownName}'s avatar -
- {/if} -
- {#if events} -

- {events.length} -

- {/if} - - {#if totalRelays} -
- {connectedRelays}/{totalRelays} relays -
- {#each Array(totalRelays) as _, i} - - {/each} -
-
- {/if} -
-
- - -
-
- {#if $selectedMessage} - - {:else} - {#each events as event} - - {#if event.deleted} - πŸ‘† deleted - {/if} - {:else} -

no comments

- {/each} - {/if} -
- - {#if channelMetadata.name} -
- {#if channelMetadata.picture} - - {/if} - -
-
{channelMetadata.name}
- {#if channelMetadata.about} -
{channelMetadata.about}
- {/if} -
-
- {/if} - - {#if $selectedMessage} - {#if !getEventById($selectedMessage)} -

Couldn't find event with ID {$selectedMessage}

- {:else} -
- - - - - - - -
- {/if} - {/if} -
- - - -
-