nostr-web-components
Version:
collection of web components that provide quick access to basic nostr things
87 lines (63 loc) • 3.6 kB
Markdown
# nostr web components
you want to display a nostr username when you just have a pubkey? no build systems, just do this:
```javascript
<script src="https://cdn.jsdelivr.net/npm/nostr-web-components/dist/nostr-name.js"></script>
<div>hello, <nostr-name pubkey="npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6" /></div>
```
## demo
a more complete demo of all available components and how to use them can be found at https://unpkg.com/nostr-web-components/demo.html.
## how to use
bundled builds -- a single file that contains one component and all the dependencies, can be found at https://cdn.jsdelivr.net/npm/nostr-web-components/dist/, while unbundled builds are under the `./lib` directory. the unbundled files can either be imported using a normal bundler or directly in a browser using es6 imports.
### using standalone component bundles
there is one bundled file for each component, so if you’re just importing one component just get the one you need, as in the demo above.
### using the big bundle with all components
just include a script like `<script src="https://cdn.jsdelivr.net/npm/nostr-web-components/dist/index.js"></script>` and all components will be available globally.
see https://unpkg.com/nostr-web-components/bigbundledemo.html for a demo of this.
### using es6
in this case you must do something horrible like this (but it works!):
```html
<script type="importmap">
{
"imports": {
"@nostr/tools/": "https://esm.sh/*jsr/@nostr/tools@2.17.4/",
"@nostr/gadgets/": "https://esm.sh/*jsr/@nostr/gadgets@0.0.43/",
"@noble/curves/": "https://esm.sh/*@noble/curves@1.2.0/",
"@noble/hashes/": "https://esm.sh/*@noble/hashes@1.3.1/",
"@scure/base/": "https://esm.sh/*@scure/base@1.1.1/",
"@scure/base": "https://esm.sh/*@scure/base@1.1.1",
"idb-keyval": "https://esm.sh/idb-keyval@6.2.1"
},
"scopes": {
"https://esm.sh/": {
"@jsr/nostr__tools/": "https://esm.sh/*@jsr/nostr__tools@2.17.4/",
"@jsr/nostr__gadgets/": "https://esm.sh/*@jsr/nostr__gadgets@0.0.43/",
"@jsr/fiatjaf__lru-cache/": "https://esm.sh/jsr/@fiatjaf/lru-cache@0.0.1/"
}
}
}
</script>
<script type="module">
import 'https://esm.sh/nostr-web-components/lib/nostr-name.js'
import 'https://esm.sh/nostr-web-components/lib/nostr-picture.js'
</script>
<nostr-name pubkey="npub137gavftkelnara27cx56uchxr6qxvf4ragjfpe8qmlsl64kwrf3q34fpat"></nostr-name>
<nostr-picture pubkey="npub137gavftkelnara27cx56uchxr6qxvf4ragjfpe8qmlsl64kwrf3q34fpat"></nostr-picture>
```
see https://unpkg.com/nostr-web-components/importmapdemo.html for a demo of this.
## styling components
all components expose named [`part`s](https://developer.mozilla.org/en-US/docs/Web/CSS/::part) that can be accessed with CSS like `nostr-picture::part(img) { border: 12px solid fuchsia; }`, see rendered HTML in browser console for part names available.
### styling components with tailwind
if you use tailwind you can use `part-[img]:border-2`, `part-[...]:text-red-500` (and so on) at the component directly in order to style its internal parts, it works like other special variant selectors like `hover:...` (the [demo](https://unpkg.com/nostr-web-components/demo.html) page is using this). you just need to add this to your `tailwind.config.js`:
```diff
+const plugin = require('tailwindcss/plugin')
module.exports = {
content: ["./src/**/*.{html,js}"],
+ plugins: [
+ plugin(({ matchVariant }) => {
+ matchVariant('part', value => {
+ return `&::part(${value})`
+ })
+ }),
+ ],
}
```