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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@blockfact/react-facti

v1.1.1

Published

React component for displaying and verifying .facti files

Downloads

478

Readme

@blockfact/react-facti

React component for displaying and verifying .facti files with blockchain verification.

Installation

npm install @blockfact/react-facti
# or
yarn add @blockfact/react-facti

Usage

Basic Display

import FactiImage from '@blockfact/react-facti';

function App() {
  return (
    <FactiImage 
      factiUrl="https://gateway.pinata.cloud/ipfs/QmXXX"
      alt="Verified Content"
    />
  );
}

With Metadata

<FactiImage 
  factiUrl="https://gateway.pinata.cloud/ipfs/QmXXX"
  showMetadata={true}
  onMetadataLoad={(metadata) => {
    console.log('Transaction:', metadata.tx_hash);
  }}
/>

Custom Styling

<FactiImage 
  factiUrl="https://gateway.pinata.cloud/ipfs/QmXXX"
  className="my-image"
  style={{ maxWidth: '500px', margin: '20px auto' }}
/>

Parse Manually

import { parseFacTi } from '@blockfact/react-facti';

function CustomComponent() {
  const [data, setData] = useState(null);

  useEffect(() => {
    parseFacTi('https://gateway.pinata.cloud/ipfs/QmXXX')
      .then(setData);
  }, []);

  if (!data) return <div>Loading...</div>;

  return (
    <div>
      <img src={data.imageUrl} alt="Content" />
      <p>Owner: {data.metadata.wallet}</p>
      <p>Location: {data.metadata.latitude}, {data.metadata.longitude}</p>
    </div>
  );
}

Props

| Prop | Type | Default | Description | |------|------|---------|-------------| | factiUrl | string | required | URL to .facti file | | alt | string | 'BlockFact Content' | Image alt text | | className | string | '' | CSS class name | | style | object | {} | Inline styles | | showMetadata | boolean | false | Show metadata below image | | onMetadataLoad | function | null | Callback when metadata loads | | onError | function | null | Callback on error |

API

parseFacTi(factiUrl)

Parse a .facti file and extract image + metadata.

Returns:

{
  imageUrl: "blob:...",  // Blob URL for image
  metadata: {
    tx_hash: "0x...",
    wallet: "0x...",
    timestamp: "2026-02-26T13:20:00Z",
    latitude: 40.7128,
    longitude: -74.0060,
    // ... other fields
  }
}

TypeScript

Full TypeScript support included:

import FactiImage, { FactiMetadata, parseFacTi } from '@blockfact/react-facti';

function App() {
  const handleLoad = (metadata: FactiMetadata) => {
    console.log(metadata.tx_hash);
  };

  return <FactiImage factiUrl="..." onMetadataLoad={handleLoad} />;
}

Features

  • ✅ Zero dependencies (only React peer dependency)
  • ✅ TypeScript support
  • ✅ Automatic image extraction from .facti files
  • ✅ Blockchain verification links
  • ✅ GPS coordinates with Google Maps links
  • ✅ Loading and error states
  • ✅ Memory cleanup (revokes blob URLs)

Examples

Gallery

const images = [
  'https://gateway.pinata.cloud/ipfs/QmAAA',
  'https://gateway.pinata.cloud/ipfs/QmBBB',
  'https://gateway.pinata.cloud/ipfs/QmCCC',
];

function Gallery() {
  return (
    <div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '20px' }}>
      {images.map(url => (
        <FactiImage key={url} factiUrl={url} showMetadata={true} />
      ))}
    </div>
  );
}

With Error Handling

function SafeFactiImage({ factiUrl }) {
  const [error, setError] = useState(null);

  if (error) {
    return <div>Failed to load: {error.message}</div>;
  }

  return (
    <FactiImage 
      factiUrl={factiUrl}
      onError={setError}
    />
  );
}

License

MIT

Links