UNPKG

nostr-web-components

Version:

collection of web components that provide quick access to basic nostr things

87 lines (63 loc) 3.6 kB
# 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})` + }) + }), + ], } ```