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

@veavr/react

v1.0.1

Published

veavr, build flexible ui components

Downloads

103

Readme

veavr, build flexible ui components.

veavr is a library which helps you build highly customizable ui components featuring tight integration with TypeScript.

The project is still in it's early stages and should be treated as experimental.
As such veavr's API's and their documentation are not yet final.
You might encounter bugs or performance issues along the way.
If you still feel like giving it a try you're welcome.

@veavr/react

This is the veavr library for react.

Requirements

"react": ">=17"
"typescript": ">=5.4"

This package is provided as ESM only and as such requires

  • Server: an ESM + CJS compatible runtime with standard react OR the use of a bundler.
  • Client: an ESM compatible runtime plus an ESM drop-in replacement of react, such as https://esm.sh/react, OR the use of a bundler

Usage

Implementing a component with veavr.

import { veavr } from '@veavr/react'

import * as Parts from './parts.tsx'

export type CardProps = {
  img?: string
  title?: string
  body?: React.ReactNode
  variant?: 'small' | 'medium'
}

export const Card = veavr<CardProps>()({
  // ˇ parts is just a an object mapping names to react components
  parts: Parts,
  component: ({ props, veavr }) => {
    return veavr
      .bindProps(() => ({
        Root: {
          imgUrl: props.img,
          variant: props.variant ?? 'small',
        },
      }))
      .bindNode(({ parts, assignedProps }) => (
        <parts.Root {...assignedProps.Root}>
          <parts.Overlay {...assignedProps.Overlay}>
            <parts.Title {...assignedProps.Title}>{props.title}</parts.Title>
            <parts.Body {...assignedProps.Body}>{props.body}</parts.Body>
          </parts.Overlay>
        </parts.Root>
      ))
  },
})
Card.displayName = 'Card'

Using a veavr component.

export const App = () => {
  const [clicks, setClicks] = React.useState(0)

  return (
    <Card
      img="https://picsum.photos/800/600"
      title="Click Me!"
      body={`You clicked me ${clicks} times`}
      $vvr={{
        attach: {
          // ˇ Super powers! Attach any prop to any internal element.
          Root: {
            'aria-label': 'Card of The Century',
            onClick: () => setClicks(clicks + 1),
          },
        },
      }}
    />
  )
}

This is just a glimpse of what components built with veavr can do. You can find the full documentation Here.