npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

smartnftportal

v1.0.114

Published

A `<SmartNFTPortal>` is a React control which renders Smart NFTs in the browser. This widget takes care of the `<iframe>` sandbox, and provides the Smart NFT Javascript API to any NFT which is rendered inside it. This provides a great deal of extra power

Downloads

127

Readme

<SmartNFTPortal>

A <SmartNFTPortal> is a React control which renders Smart NFTs in the browser. This widget takes care of the <iframe> sandbox, and provides the Smart NFT Javascript API to any NFT which is rendered inside it. This provides a great deal of extra power to Javascript NFTs, enabling them to respond to changes on the blockchain, as well as load additional assets such as Javascript libraries, images, and other data directly from the blockchain.

While this API provides a lot of additional functionality to NFTs inside the sandbox, it's important to note that they are still fully sandboxed - this control handles all the necessary inter-process communication between the sandboxed iframe and its parent document using the sendMessage() API.

The first Smart NFT collection

Click here to see it in action in the Smart NFT Playground.

The source code of the Smart NFT Playground is also available.

libcip54 provides the backend queries necessary to support this API on Cardano.

Click here to read the Cardano Improvement Proposal

This control, and the API in general is intended to be applicable to any UTXO blockchain - in particular if there's interest it may be ported to Bitcoin BRC20, and Ergo native tokens too. Currently, libcip54 provides the backend functionality for Cardano, but it would be a simple matter to port this library to other blockchains (the queries will just need to be tweaked for different chain indexers)

Installing

$ npm install smartnftportal
or
$ yarn add smartnftportal

Exports

The default export is <SmartNFTPortal>. To use it:

import { SmartNFTPortal } from "smartnftportal"

React Smart NFT Portal Usage

At minimum you must pass in the NFT metadata, and the smartImports structure, which has been generated by libcip54. Libcip54 is a node.js library which provides the backend queries to import this data from the Cardano blockchain via the DBSync chain indexer - so if you have your own DBSync server, this is the preferred option. If you don't have a DBSync server, then you can query the Plutus.art API for the same data.

import React from 'react'
import { SmartNFTPortal } from 'smartnftportal'
import axios from "axios"

function App() {
  const [nft,setNft] = React.useState(null);
  React.useEffect(()=> { 
    axios.get('https://plutus-art-dev.herokuapp.com/asset/1eaf3b3ffb75ff27c43c512c23c6450b307f138281efb1d690b8465231').then((d)=>{
        setNft(d.data);
    });
  },[]);
  return (
    <div className="App">
      <header className="App-header">
        <div style={{ width: 400 }}>
          <SmartNFTPortal 
            smartImports={nft?.smartImports}
            metadata={nft?.metadata}
            loading={!nft}
             />
        </div>
      </header>
    </div>
  )
}

export default App

<SmartNFTPortal />

The following properties are available on the control:

loading: boolean

When true, the control will assume the metadata and smartImports fields haven't been populated yet and will display a loading message

smartImports: object

This is a complex object containing all the imports from the blockchain - intended to be generated by libcip54

metadata: object

This is a copy of the NFT's metadata - if it's a CIP68 asset, the metadata should be converted from the CBOR into a JSON format that matches CIP25 assets.

loadingContent: object

default: <div>Loading...</div>

A react control or JSX tag to display when the control is loading

apiRoot: string

default: null

The initial smartImport object should contain all the data needed to initially render the NFT, but some NFTs may choose to request additional data as they run - the necessary endpoints are provided in libcip54.

className: string

default: ``

Provide a custom class name for the iframe tag itself.

focus: boolean

default: false

If true, the iframe will attempt to request focus() after the initial document has loaded.

onFocus: function

default null

A callback function for the focus event

onBlur: function

default null

A callback function for the blur event

style: object

default: null

CSS Styles

random: number

default: null

Just a quick way to trigger a refresh of the component

inactiveHtmlStyle: string

default: ''

A snippet of CSS to add to the <html> tag within the sandbox when is not focused

activeHtmlStyle: string

default: ''

A snippet of CSS to add to the <html> tag within the sandbox when is focused

onReady: function

default null

A callback function for when the iframe's dom is ready

onScroll: function

default null

A callback function to get the scroll event from within the iframe

onMouseOver: function

default null

A callback function for the mouseover event

onMouseOut: function

default null

A callback function for the mouseout event

onClick: function

default null

A callback function for the click event

onMouseDown: function

default null

A callback function for the mousedown event

onMouseUp: function

default null

A callback function for the mouseup event

onMouseMove: function

default null

A callback function for the mousemove event

onContextMenu: function

default null

A callback function for the contextmenu event

onDblClick: function

default null

A callback function for the dblClick event

onTouchStart: function

default null

A callback function for the touchstart event

onTouchEnd: function

default null

A callback function for the touchend event

onTouchMove: function

default null

A callback function for the touchmove event

onTouchCancel: function

default null

A callback function for the touchcancel event